diff --git a/comd-cl/LICENSE.md b/comd-cl/LICENSE.md new file mode 100644 index 0000000..edfc70b --- /dev/null +++ b/comd-cl/LICENSE.md @@ -0,0 +1,18 @@ +License (BSD) +------------- + +Copyright (c) 2013, Los Alamos National Security, LLC +All rights reserved. + +Copyright 2013. Los Alamos National Security, LLC. This software was produced under U.S. Government contract DE-AC52-06NA25396 for Los Alamos National Laboratory (LANL), which is operated by Los Alamos National Security, LLC for the U.S. Department of Energy. The U.S. Government has rights to use, reproduce, and distribute this software. NEITHER THE GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified to produce derivative works, such modified software should be clearly marked, so as not to confuse it with the version available from LANL. + +Additionally, redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +* Neither the name of Los Alamos National Security, LLC, Los Alamos National Laboratory, LANL, the U.S. Government, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY LOS ALAMOS NATIONAL SECURITY, LLC AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL LOS ALAMOS NATIONAL SECURITY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/comd-cl/README.md b/comd-cl/README.md new file mode 100644 index 0000000..f05be4e --- /dev/null +++ b/comd-cl/README.md @@ -0,0 +1,20 @@ +CoMD +==== + +Classical molecular dynamics proxy application. + +This is CoMD version 1.1 +------------------------ + +CoMD is a reference implementation of typical classical molecular +dynamics algorithms and workloads. It is created and maintained by +The Exascale Co-Design Center for Materials in Extreme Environments +(ExMatEx). http://codesign.lanl.gov/projects/exmatex. The +code is intended to serve as a vehicle for co-design by allowing +others to extend and/or reimplement it as needed to test performance of +new architectures, programming models, etc. + +To view the generated Doxygen documentation for CoMD, please visit +exmatex.github.io/CoMD/doxygen-mpi/index.html. + +To contact the developers of CoMD send email to exmatex-comd@llnl.gov. diff --git a/comd-cl/pots/Cu01.eam.alloy b/comd-cl/pots/Cu01.eam.alloy new file mode 100644 index 0000000..0ef92df --- /dev/null +++ b/comd-cl/pots/Cu01.eam.alloy @@ -0,0 +1,30006 @@ + Cu EAM from Phys. Rev. B 63, 224106 (2001) in the LAMMPS setfl format. + Conversion by C. A. Becker from Y. Mishin files. + 4 February 2009. http://www.ctcms.nist.gov/potentials + 1 Cu +10000 0.1200000000000000E-02 10000 0.5506786000000000E-03 0.5506786000000000E+01 + 29 0.6354600000E+02 0.3615000000E+01 fcc + -0.2009087334761683E-06 + -0.1275420370511642E-01 + -0.2543348301300537E-01 + -0.3803843376572035E-01 + -0.5056945089658132E-01 + -0.6302692933890831E-01 + -0.7541126402602133E-01 + -0.8772284990055162E-01 + -0.9996208246380645E-01 + -0.1121293580830409E+00 + -0.1242250732000000E+00 + -0.1362496229994081E+00 + -0.1482033976379054E+00 + -0.1600867860151113E+00 + -0.1719001767817976E+00 + -0.1836439556958839E+00 + -0.1953185066489338E+00 + -0.2069242134663450E+00 + -0.2184614578699197E+00 + -0.2299306183208880E+00 + -0.2413320730000000E+00 + -0.2526661991874381E+00 + -0.2639333705611112E+00 + -0.2751339598983599E+00 + -0.2862683397083445E+00 + -0.2973368793826277E+00 + -0.3083399463014190E+00 + -0.3192779077783497E+00 + -0.3301511291437274E+00 + -0.3409599726537069E+00 + -0.3517048003000000E+00 + -0.3623859731899111E+00 + -0.3730038488931136E+00 + -0.3835587840948733E+00 + -0.3940511352202862E+00 + -0.4044812556699727E+00 + -0.4148494968932789E+00 + -0.4251562102749704E+00 + -0.4354017452762610E+00 + -0.4455864483768592E+00 + -0.4557106658000000E+00 + -0.4657747429091851E+00 + -0.4757790216289831E+00 + -0.4857238430242294E+00 + -0.4956095479071764E+00 + -0.5054364741537949E+00 + -0.5152049577456812E+00 + -0.5249153346016918E+00 + -0.5345679387707017E+00 + -0.5441631014031138E+00 + -0.5537011534000000E+00 + -0.5631824248291686E+00 + -0.5726072424253720E+00 + -0.5819759320900997E+00 + -0.5912888194793432E+00 + -0.6005462273951904E+00 + -0.6097484767985005E+00 + -0.6188958885892558E+00 + -0.6279887818560500E+00 + -0.6370274728798239E+00 + -0.6460122777000001E+00 + -0.6549435115445536E+00 + -0.6638214863956698E+00 + -0.6726465134240865E+00 + -0.6814189035629756E+00 + -0.6901389649838039E+00 + -0.6988070040762935E+00 + -0.7074233271712068E+00 + -0.7159882388435038E+00 + -0.7245020409466489E+00 + -0.7329650351000000E+00 + -0.7413775221331455E+00 + -0.7497397997165979E+00 + -0.7580521647311004E+00 + -0.7663149138283259E+00 + -0.7745283409970050E+00 + -0.7826927385078404E+00 + -0.7908083985742876E+00 + -0.7988756116929535E+00 + -0.8068946656993312E+00 + -0.8148658482000000E+00 + -0.8227894460425787E+00 + -0.8306657430388402E+00 + -0.8384950222415966E+00 + -0.8462775664800818E+00 + -0.8540136559844457E+00 + -0.8617035693080087E+00 + -0.8693475849485424E+00 + -0.8769459797477150E+00 + -0.8844990279802358E+00 + -0.8920070037000000E+00 + -0.8994701802252610E+00 + -0.9068888279317065E+00 + -0.9142632164593822E+00 + -0.9215936152306195E+00 + -0.9288802911368148E+00 + -0.9361235094365034E+00 + -0.9433235353345097E+00 + -0.9504806324458615E+00 + -0.9575950619214018E+00 + -0.9646670847000001E+00 + -0.9716969609969478E+00 + -0.9786849481332233E+00 + -0.9856313027062255E+00 + -0.9925362811093013E+00 + -0.9994001373636849E+00 + -0.1006223123960216E+01 + -0.1013005493337151E+01 + -0.1019747496308282E+01 + -0.1026449381169475E+01 + -0.1033111396000000E+01 + -0.1039733788228547E+01 + -0.1046316802681483E+01 + -0.1052860683534592E+01 + -0.1059365674750514E+01 + -0.1065832017814072E+01 + -0.1072259952611498E+01 + -0.1078649718978050E+01 + -0.1085001555289084E+01 + -0.1091315697657113E+01 + -0.1097592382000000E+01 + -0.1103831843559788E+01 + -0.1110034314875264E+01 + -0.1116200027809396E+01 + -0.1122329214028773E+01 + -0.1128422102917060E+01 + -0.1134478922385063E+01 + -0.1140499900295265E+01 + -0.1146485263083378E+01 + -0.1152435234973627E+01 + -0.1158350040000000E+01 + -0.1164229901539452E+01 + -0.1170075040340803E+01 + -0.1175885676495837E+01 + -0.1181662029905283E+01 + -0.1187404318248824E+01 + -0.1193112757773212E+01 + -0.1198787564678180E+01 + -0.1204428953775262E+01 + -0.1210037137724289E+01 + -0.1215612329000000E+01 + -0.1221154739467705E+01 + -0.1226664578555011E+01 + -0.1232142055080099E+01 + -0.1237587377664525E+01 + -0.1243000752644089E+01 + -0.1248382384879909E+01 + -0.1253732479188408E+01 + -0.1259051239179017E+01 + -0.1264338866590328E+01 + -0.1269595563000000E+01 + -0.1274821529311886E+01 + -0.1280016963734615E+01 + -0.1285182063803010E+01 + -0.1290317026891413E+01 + -0.1295422048508551E+01 + -0.1300497322959533E+01 + -0.1305543044506602E+01 + -0.1310559406043834E+01 + -0.1315546598344638E+01 + -0.1320504812000000E+01 + -0.1325434237014244E+01 + -0.1330335061045038E+01 + -0.1335207471163388E+01 + -0.1340051654278028E+01 + -0.1344867795411274E+01 + -0.1349656078368403E+01 + -0.1354416686912271E+01 + -0.1359149803477600E+01 + -0.1363855608440501E+01 + -0.1368534282000000E+01 + -0.1373186003810438E+01 + -0.1377810951347402E+01 + -0.1382409301541792E+01 + -0.1386981231155150E+01 + -0.1391526914980213E+01 + -0.1396046526539522E+01 + -0.1400540239315304E+01 + -0.1405008225640982E+01 + -0.1409450656069343E+01 + -0.1413867701000000E+01 + -0.1418259530258992E+01 + -0.1422626311378071E+01 + -0.1426968211315414E+01 + -0.1431285396878162E+01 + -0.1435578033117648E+01 + -0.1439846283952428E+01 + -0.1444090313261939E+01 + -0.1448310283711338E+01 + -0.1452506356083651E+01 + -0.1456678691000000E+01 + -0.1460827448563960E+01 + -0.1464952786808915E+01 + -0.1469054863250704E+01 + -0.1473133835260456E+01 + -0.1477189858527089E+01 + -0.1481223087654217E+01 + -0.1485233677206892E+01 + -0.1489221780521467E+01 + -0.1493187549029819E+01 + -0.1497131134000000E+01 + -0.1501052686241096E+01 + -0.1504952354726340E+01 + -0.1508830287970000E+01 + -0.1512686634330126E+01 + -0.1516521540348749E+01 + -0.1520335151396273E+01 + -0.1524127612806681E+01 + -0.1527899068900383E+01 + -0.1531649662426747E+01 + -0.1535379536000000E+01 + -0.1539088831724033E+01 + -0.1542777689661400E+01 + -0.1546446249364322E+01 + -0.1550094650245002E+01 + -0.1553723030087958E+01 + -0.1557331525627584E+01 + -0.1560920273564683E+01 + -0.1564489409634618E+01 + -0.1568039068076322E+01 + -0.1571569383000000E+01 + -0.1575080487999206E+01 + -0.1578572514600873E+01 + -0.1582045593815281E+01 + -0.1585499856529766E+01 + -0.1588935432202446E+01 + -0.1592352449369366E+01 + -0.1595751036533806E+01 + -0.1599131321155474E+01 + -0.1602493429076531E+01 + -0.1605837486000000E+01 + -0.1609163617195270E+01 + -0.1612471946197216E+01 + -0.1615762596107082E+01 + -0.1619035689895188E+01 + -0.1622291349009842E+01 + -0.1625529693917410E+01 + -0.1628750845051415E+01 + -0.1631954921856770E+01 + -0.1635142042246046E+01 + -0.1638312324000000E+01 + -0.1641465884501757E+01 + -0.1644602839543924E+01 + -0.1647723304521476E+01 + -0.1650827394696467E+01 + -0.1653915223785757E+01 + -0.1656986904509302E+01 + -0.1660042549555630E+01 + -0.1663082270724499E+01 + -0.1666106178438070E+01 + -0.1669114383000000E+01 + -0.1672106994305342E+01 + -0.1675084120614728E+01 + -0.1678045869780186E+01 + -0.1680992349536516E+01 + -0.1683923666255790E+01 + -0.1686839925430895E+01 + -0.1689741232524813E+01 + -0.1692627692085263E+01 + -0.1695499407241314E+01 + -0.1698356481000000E+01 + -0.1701199015981454E+01 + -0.1704027113258207E+01 + -0.1706840873515889E+01 + -0.1709640397332715E+01 + -0.1712425784038180E+01 + -0.1715197132156155E+01 + -0.1717954540182124E+01 + -0.1720698105713843E+01 + -0.1723427924957605E+01 + -0.1726144094000000E+01 + -0.1728846708557055E+01 + -0.1731535862862520E+01 + -0.1734211650779581E+01 + -0.1736874166066309E+01 + -0.1739523501258852E+01 + -0.1742159748105022E+01 + -0.1744782998325770E+01 + -0.1747393342818886E+01 + -0.1749990871206252E+01 + -0.1752575673000000E+01 + -0.1755147837361704E+01 + -0.1757707452050730E+01 + -0.1760254604475889E+01 + -0.1762789381939216E+01 + -0.1765311870501496E+01 + -0.1767822155422698E+01 + -0.1770320321936820E+01 + -0.1772806454520102E+01 + -0.1775280636474266E+01 + -0.1777742951000000E+01 + -0.1780193480970314E+01 + -0.1782632307947510E+01 + -0.1785059513166212E+01 + -0.1787475177758437E+01 + -0.1789879381663384E+01 + -0.1792272204050694E+01 + -0.1794653724064624E+01 + -0.1797024020095836E+01 + -0.1799383169366923E+01 + -0.1801731249000000E+01 + -0.1804068335821949E+01 + -0.1806394505478730E+01 + -0.1808709833321069E+01 + -0.1811014394598077E+01 + -0.1813308263377562E+01 + -0.1815591512965202E+01 + -0.1817864216642717E+01 + -0.1820126447016415E+01 + -0.1822378275645720E+01 + -0.1824619774000000E+01 + -0.1826851013244321E+01 + -0.1829072063326536E+01 + -0.1831282993890193E+01 + -0.1833483874485552E+01 + -0.1835674773578381E+01 + -0.1837855758934776E+01 + -0.1840026898299086E+01 + -0.1842188258810579E+01 + -0.1844339906670646E+01 + -0.1846481908000000E+01 + -0.1848614328595355E+01 + -0.1850737232957422E+01 + -0.1852850685262915E+01 + -0.1854954749609222E+01 + -0.1857049489171613E+01 + -0.1859134966530443E+01 + -0.1861211244245812E+01 + -0.1863278384257484E+01 + -0.1865336447543702E+01 + -0.1867385495000000E+01 + -0.1869425587232227E+01 + -0.1871456783687496E+01 + -0.1873479143523239E+01 + -0.1875492725818927E+01 + -0.1877497588747747E+01 + -0.1879493789898190E+01 + -0.1881481386838707E+01 + -0.1883460436520289E+01 + -0.1885430994936856E+01 + -0.1887393118000000E+01 + -0.1889346861375862E+01 + -0.1891292279748781E+01 + -0.1893229427557645E+01 + -0.1895158359158574E+01 + -0.1897079127945524E+01 + -0.1898991786691697E+01 + -0.1900896388151422E+01 + -0.1902792984567487E+01 + -0.1904681627389784E+01 + -0.1906562368000000E+01 + -0.1908435257521940E+01 + -0.1910300346047882E+01 + -0.1912157683412223E+01 + -0.1914007319375202E+01 + -0.1915849302834991E+01 + -0.1917683682133586E+01 + -0.1919510505595345E+01 + -0.1921329821042390E+01 + -0.1923141675518378E+01 + -0.1924946116000000E+01 + -0.1926743189214251E+01 + -0.1928532940889333E+01 + -0.1930315416503749E+01 + -0.1932090661474907E+01 + -0.1933858720509962E+01 + -0.1935619637857845E+01 + -0.1937373457750643E+01 + -0.1939120223868238E+01 + -0.1940859979034581E+01 + -0.1942592766000000E+01 + -0.1944318627311001E+01 + -0.1946037604698806E+01 + -0.1947749739690818E+01 + -0.1949455073745634E+01 + -0.1951153647521969E+01 + -0.1952845501162486E+01 + -0.1954530674794201E+01 + -0.1956209208121270E+01 + -0.1957881140192421E+01 + -0.1959546510000000E+01 + -0.1961205356314721E+01 + -0.1962857717020769E+01 + -0.1964503629780696E+01 + -0.1966143132200113E+01 + -0.1967776261222656E+01 + -0.1969403053364887E+01 + -0.1971023545127929E+01 + -0.1972637772513732E+01 + -0.1974245770750530E+01 + -0.1975847575000000E+01 + -0.1977443220272515E+01 + -0.1979032740973228E+01 + -0.1980616171355986E+01 + -0.1982193545608518E+01 + -0.1983764897149916E+01 + -0.1985330258903374E+01 + -0.1986889663777487E+01 + -0.1988443144300664E+01 + -0.1989990732412026E+01 + -0.1991532460000000E+01 + -0.1993068358753504E+01 + -0.1994598459563403E+01 + -0.1996122793121051E+01 + -0.1997641390076950E+01 + -0.1999154280606735E+01 + -0.2000661494579671E+01 + -0.2002163061851730E+01 + -0.2003659011787720E+01 + -0.2005149372991140E+01 + -0.2006634174000000E+01 + -0.2008113443213277E+01 + -0.2009587208473803E+01 + -0.2011055497485377E+01 + -0.2012518337902066E+01 + -0.2013975756799850E+01 + -0.2015427780881741E+01 + -0.2016874436838553E+01 + -0.2018315751001916E+01 + -0.2019751749146729E+01 + -0.2021182457000000E+01 + -0.2022607900104098E+01 + -0.2024028103262831E+01 + -0.2025443091095367E+01 + -0.2026852888191598E+01 + -0.2028257518801076E+01 + -0.2029657006953780E+01 + -0.2031051376668504E+01 + -0.2032440651512650E+01 + -0.2033824854353964E+01 + -0.2035204008000000E+01 + -0.2036578135143633E+01 + -0.2037947258018999E+01 + -0.2039311398745550E+01 + -0.2040670579398844E+01 + -0.2042024821544195E+01 + -0.2043374146417726E+01 + -0.2044718575244266E+01 + -0.2046058128900263E+01 + -0.2047392827722173E+01 + -0.2048722692000000E+01 + -0.2050047741934972E+01 + -0.2051367997373212E+01 + -0.2052683478072064E+01 + -0.2053994203732541E+01 + -0.2055300193400791E+01 + -0.2056601465700473E+01 + -0.2057898039245653E+01 + -0.2059189932497654E+01 + -0.2060477163681038E+01 + -0.2061759751000000E+01 + -0.2063037712475804E+01 + -0.2064311065397984E+01 + -0.2065579826873143E+01 + -0.2066844013989060E+01 + -0.2068103643614669E+01 + -0.2069358732477716E+01 + -0.2070609297297783E+01 + -0.2071855354445721E+01 + -0.2073096919751853E+01 + -0.2074334009000000E+01 + -0.2075566637882236E+01 + -0.2076794821723623E+01 + -0.2078018575757473E+01 + -0.2079237915180339E+01 + -0.2080452854761441E+01 + -0.2081663408994306E+01 + -0.2082869592364641E+01 + -0.2084071419164835E+01 + -0.2085268903387632E+01 + -0.2086462059000000E+01 + -0.2087650899846945E+01 + -0.2088835439285627E+01 + -0.2090015690551244E+01 + -0.2091191666849317E+01 + -0.2092363381040373E+01 + -0.2093530845762361E+01 + -0.2094694073646874E+01 + -0.2095853077166844E+01 + -0.2097007868549271E+01 + -0.2098158460000000E+01 + -0.2099304863597632E+01 + -0.2100447090911791E+01 + -0.2101585153384858E+01 + -0.2102719062439176E+01 + -0.2103848829264160E+01 + -0.2104974464898949E+01 + -0.2106095980376908E+01 + -0.2107213386535272E+01 + -0.2108326693907276E+01 + -0.2109435913000000E+01 + -0.2110541054228187E+01 + -0.2111642127637214E+01 + -0.2112739143180116E+01 + -0.2113832110785522E+01 + -0.2114921040098316E+01 + -0.2116005940580323E+01 + -0.2117086821687940E+01 + -0.2118163692735007E+01 + -0.2119236562814403E+01 + -0.2120305441000000E+01 + -0.2121370336272647E+01 + -0.2122431257241108E+01 + -0.2123488212421125E+01 + -0.2124541210313697E+01 + -0.2125590259248411E+01 + -0.2126635367444269E+01 + -0.2127676543115248E+01 + -0.2128713794284385E+01 + -0.2129747128678761E+01 + -0.2130776554000000E+01 + -0.2131802077884180E+01 + -0.2132823707705193E+01 + -0.2133841450771389E+01 + -0.2134855314374259E+01 + -0.2135865305609324E+01 + -0.2136871431445675E+01 + -0.2137873698848155E+01 + -0.2138872114652985E+01 + -0.2139866685497029E+01 + -0.2140857418000000E+01 + -0.2141844318719020E+01 + -0.2142827393960842E+01 + -0.2143806649969623E+01 + -0.2144782092968855E+01 + -0.2145753728941775E+01 + -0.2146721563716617E+01 + -0.2147685603118685E+01 + -0.2148645852952387E+01 + -0.2149602318989746E+01 + -0.2150555007000000E+01 + -0.2151503922643747E+01 + -0.2152449071147025E+01 + -0.2153390457627235E+01 + -0.2154328087205319E+01 + -0.2155261965043419E+01 + -0.2156192096330258E+01 + -0.2157118486251251E+01 + -0.2158041139766919E+01 + -0.2158960061489188E+01 + -0.2159875256000000E+01 + -0.2160786727896150E+01 + -0.2161694481833855E+01 + -0.2162598522484184E+01 + -0.2163498854490589E+01 + -0.2164395482175444E+01 + -0.2165288409653980E+01 + -0.2166177641038233E+01 + -0.2167063180455811E+01 + -0.2167945032058459E+01 + -0.2168823200000000E+01 + -0.2169697688364440E+01 + -0.2170568500956531E+01 + -0.2171435641511209E+01 + -0.2172299113764080E+01 + -0.2173158921458491E+01 + -0.2174015068342788E+01 + -0.2174867558162654E+01 + -0.2175716394498925E+01 + -0.2176561580676925E+01 + -0.2177403120000000E+01 + -0.2178241015795969E+01 + -0.2179075271490548E+01 + -0.2179905890533924E+01 + -0.2180732876353261E+01 + -0.2181556232108036E+01 + -0.2182375960785024E+01 + -0.2183192065368734E+01 + -0.2184004548880083E+01 + -0.2184813414396432E+01 + -0.2185618665000000E+01 + -0.2186420303731171E+01 + -0.2187218333463012E+01 + -0.2188012757026757E+01 + -0.2188803577250363E+01 + -0.2189590796923672E+01 + -0.2190374418811937E+01 + -0.2191154445679191E+01 + -0.2191930880240778E+01 + -0.2192703725136584E+01 + -0.2193472983000000E+01 + -0.2194238656455119E+01 + -0.2195000748088828E+01 + -0.2195759260478713E+01 + -0.2196514196195876E+01 + -0.2197265557736027E+01 + -0.2198013347546239E+01 + -0.2198757568072360E+01 + -0.2199498221735464E+01 + -0.2200235310918221E+01 + -0.2200968838000000E+01 + -0.2201698805372652E+01 + -0.2202425215477960E+01 + -0.2203148070770191E+01 + -0.2203867373692119E+01 + -0.2204583126552934E+01 + -0.2205295331575636E+01 + -0.2206003990982075E+01 + -0.2206709107011101E+01 + -0.2207410681927919E+01 + -0.2208108718000000E+01 + -0.2208803217502995E+01 + -0.2209494182745274E+01 + -0.2210181616043387E+01 + -0.2210865519709920E+01 + -0.2211545896011411E+01 + -0.2212222747184687E+01 + -0.2212896075465755E+01 + -0.2213565883071290E+01 + -0.2214232172187996E+01 + -0.2214894945000000E+01 + -0.2215554203712601E+01 + -0.2216209950615788E+01 + -0.2216862188020726E+01 + -0.2217510918232064E+01 + -0.2218156143478701E+01 + -0.2218797865940674E+01 + -0.2219436087798675E+01 + -0.2220070811321821E+01 + -0.2220702038916276E+01 + -0.2221329773000000E+01 + -0.2221954015961781E+01 + -0.2222574770073739E+01 + -0.2223192037578827E+01 + -0.2223805820726776E+01 + -0.2224416121846128E+01 + -0.2225022943316267E+01 + -0.2225626287518119E+01 + -0.2226226156874045E+01 + -0.2226822553870633E+01 + -0.2227415481000000E+01 + -0.2228004940737792E+01 + -0.2228590935493783E+01 + -0.2229173467661284E+01 + -0.2229752539647594E+01 + -0.2230328154022674E+01 + -0.2230900313461429E+01 + -0.2231469020640126E+01 + -0.2232034278211856E+01 + -0.2232596088793788E+01 + -0.2233154455000000E+01 + -0.2233709379466064E+01 + -0.2234260864913519E+01 + -0.2234808914085397E+01 + -0.2235353529726351E+01 + -0.2235894714599835E+01 + -0.2236432471481438E+01 + -0.2236966803148346E+01 + -0.2237497712461454E+01 + -0.2238025202411405E+01 + -0.2238549276000000E+01 + -0.2239069936234910E+01 + -0.2239587186147264E+01 + -0.2240101028774058E+01 + -0.2240611467158174E+01 + -0.2241118504410937E+01 + -0.2241622143687825E+01 + -0.2242122388145893E+01 + -0.2242619240992538E+01 + -0.2243112705513192E+01 + -0.2243602785000000E+01 + -0.2244089482769617E+01 + -0.2244572802236739E+01 + -0.2245052746840575E+01 + -0.2245529320024573E+01 + -0.2246002525281442E+01 + -0.2246472366135672E+01 + -0.2246938846113259E+01 + -0.2247401968798598E+01 + -0.2247861737866610E+01 + -0.2248318157000000E+01 + -0.2248771229924050E+01 + -0.2249220960534338E+01 + -0.2249667352769018E+01 + -0.2250110410563997E+01 + -0.2250550137829078E+01 + -0.2250986538457223E+01 + -0.2251419616343658E+01 + -0.2251849375536367E+01 + -0.2252275820320106E+01 + -0.2252698955000000E+01 + -0.2253118783856790E+01 + -0.2253535311073680E+01 + -0.2253948540809493E+01 + -0.2254358477247581E+01 + -0.2254765124856480E+01 + -0.2255168488288713E+01 + -0.2255568572199508E+01 + -0.2255965381222324E+01 + -0.2256358919956882E+01 + -0.2256749193000000E+01 + -0.2257136204985883E+01 + -0.2257519960698282E+01 + -0.2257900464958333E+01 + -0.2258277722601766E+01 + -0.2258651738633947E+01 + -0.2259022518169687E+01 + -0.2259390066325937E+01 + -0.2259754388238798E+01 + -0.2260115489074043E+01 + -0.2260473374000000E+01 + -0.2260828048236284E+01 + -0.2261179517207665E+01 + -0.2261527786390198E+01 + -0.2261872861260602E+01 + -0.2262214747303282E+01 + -0.2262553450007598E+01 + -0.2262888974865767E+01 + -0.2263221327536194E+01 + -0.2263550513934884E+01 + -0.2263876540000000E+01 + -0.2264199411665327E+01 + -0.2264519134847147E+01 + -0.2264835715457363E+01 + -0.2265149159422907E+01 + -0.2265459472845412E+01 + -0.2265766661939221E+01 + -0.2266070732922201E+01 + -0.2266371692111109E+01 + -0.2266669545975971E+01 + -0.2266964301000000E+01 + -0.2267255963680693E+01 + -0.2267544540572696E+01 + -0.2267830038244939E+01 + -0.2268112463276237E+01 + -0.2268391822360296E+01 + -0.2268668122264941E+01 + -0.2268941369761766E+01 + -0.2269211571774122E+01 + -0.2269478735460594E+01 + -0.2269742868000000E+01 + -0.2270003976561632E+01 + -0.2270262068276680E+01 + -0.2270517150266811E+01 + -0.2270769229676744E+01 + -0.2271018313919209E+01 + -0.2271264410579843E+01 + -0.2271507527246993E+01 + -0.2271747671498536E+01 + -0.2271984850896120E+01 + -0.2272219073000000E+01 + -0.2272450345446464E+01 + -0.2272678676175943E+01 + -0.2272904073204901E+01 + -0.2273126544549084E+01 + -0.2273346098215867E+01 + -0.2273562742207226E+01 + -0.2273776484527590E+01 + -0.2273987333334020E+01 + -0.2274195297020159E+01 + -0.2274400384000000E+01 + -0.2274602602712228E+01 + -0.2274801961694293E+01 + -0.2274998469508336E+01 + -0.2275192134722885E+01 + -0.2275382965980693E+01 + -0.2275570971972402E+01 + -0.2275756161391345E+01 + -0.2275938543044433E+01 + -0.2276118125914619E+01 + -0.2276294919000000E+01 + -0.2276468931342686E+01 + -0.2276640172160835E+01 + -0.2276808650716618E+01 + -0.2276974376276901E+01 + -0.2277137358163112E+01 + -0.2277297605731882E+01 + -0.2277455128342454E+01 + -0.2277609935475451E+01 + -0.2277762036799647E+01 + -0.2277911442000000E+01 + -0.2278058160770132E+01 + -0.2278202202838330E+01 + -0.2278343577941548E+01 + -0.2278482295838283E+01 + -0.2278618366537488E+01 + -0.2278751800209702E+01 + -0.2278882607028062E+01 + -0.2279010797160110E+01 + -0.2279136380764715E+01 + -0.2279259368000000E+01 + -0.2279379769096447E+01 + -0.2279497594573974E+01 + -0.2279612855024860E+01 + -0.2279725561036371E+01 + -0.2279835723137495E+01 + -0.2279943351819622E+01 + -0.2280048457577344E+01 + -0.2280151051134844E+01 + -0.2280251143572175E+01 + -0.2280348746000000E+01 + -0.2280443869483636E+01 + -0.2280536524907010E+01 + -0.2280626723108699E+01 + -0.2280714474958415E+01 + -0.2280799791687791E+01 + -0.2280882684761957E+01 + -0.2280963165649050E+01 + -0.2281041245763985E+01 + -0.2281116936439191E+01 + -0.2281190249000000E+01 + -0.2281261194843464E+01 + -0.2281329785653512E+01 + -0.2281396033185792E+01 + -0.2281459949198049E+01 + -0.2281521545472380E+01 + -0.2281580833806598E+01 + -0.2281637826000071E+01 + -0.2281692533929942E+01 + -0.2281744969593898E+01 + -0.2281795145000000E+01 + -0.2281843072198244E+01 + -0.2281888763406383E+01 + -0.2281932230884112E+01 + -0.2281973486895046E+01 + -0.2282012543748430E+01 + -0.2282049413782945E+01 + -0.2282084109339245E+01 + -0.2282116642847043E+01 + -0.2282147026874086E+01 + -0.2282175274000000E+01 + -0.2282201396819859E+01 + -0.2282225407990547E+01 + -0.2282247320184399E+01 + -0.2282267146083564E+01 + -0.2282284898484257E+01 + -0.2282300590256285E+01 + -0.2282314234272203E+01 + -0.2282325843495861E+01 + -0.2282335431032616E+01 + -0.2282343010000000E+01 + -0.2282348593507095E+01 + -0.2282352194629194E+01 + -0.2282353826433140E+01 + -0.2282353501647619E+01 + -0.2282351229070196E+01 + -0.2282347014962232E+01 + -0.2282340865541211E+01 + -0.2282332786928209E+01 + -0.2282322785094875E+01 + -0.2282310866000000E+01 + -0.2282297035621203E+01 + -0.2282281300011396E+01 + -0.2282263665242317E+01 + -0.2282244137376249E+01 + -0.2282222722365548E+01 + -0.2282199426091653E+01 + -0.2282174254434850E+01 + -0.2282147213277271E+01 + -0.2282118308503908E+01 + -0.2282087546000000E+01 + -0.2282054931625376E+01 + -0.2282020471138236E+01 + -0.2281984170271374E+01 + -0.2281946034763446E+01 + -0.2281906070421314E+01 + -0.2281864283095836E+01 + -0.2281820678636612E+01 + -0.2281775262773704E+01 + -0.2281728041051888E+01 + -0.2281679019000000E+01 + -0.2281628202180248E+01 + -0.2281575596288321E+01 + -0.2281521207053277E+01 + -0.2281465040188565E+01 + -0.2281407101226149E+01 + -0.2281347395580905E+01 + -0.2281285928667330E+01 + -0.2281222705994109E+01 + -0.2281157733215920E+01 + -0.2281091016000000E+01 + -0.2281022559950735E+01 + -0.2280952370421101E+01 + -0.2280880452701226E+01 + -0.2280806812087165E+01 + -0.2280731453943945E+01 + -0.2280654383681085E+01 + -0.2280575606708206E+01 + -0.2280495128396625E+01 + -0.2280412954058279E+01 + -0.2280329089000000E+01 + -0.2280243538523549E+01 + -0.2280156307910411E+01 + -0.2280067402437002E+01 + -0.2279976827374851E+01 + -0.2279884587938711E+01 + -0.2279790689306699E+01 + -0.2279695136655952E+01 + -0.2279597935141404E+01 + -0.2279499089883569E+01 + -0.2279398606000000E+01 + -0.2279296488610706E+01 + -0.2279192742845509E+01 + -0.2279087373836687E+01 + -0.2278980386708567E+01 + -0.2278871786493089E+01 + -0.2278761578162588E+01 + -0.2278649766688285E+01 + -0.2278536357034374E+01 + -0.2278421354154158E+01 + -0.2278304763000000E+01 + -0.2278186588536737E+01 + -0.2278066835779101E+01 + -0.2277945509754295E+01 + -0.2277822615475679E+01 + -0.2277698157795649E+01 + -0.2277572141462751E+01 + -0.2277444571224265E+01 + -0.2277315451855139E+01 + -0.2277184788173209E+01 + -0.2277052585000000E+01 + -0.2276918847153963E+01 + -0.2276783579441255E+01 + -0.2276646786664957E+01 + -0.2276508473620105E+01 + -0.2276368645008198E+01 + -0.2276227305470389E+01 + -0.2276084459646960E+01 + -0.2275940112186413E+01 + -0.2275794267749983E+01 + -0.2275646931000000E+01 + -0.2275498106584162E+01 + -0.2275347799091633E+01 + -0.2275196013096941E+01 + -0.2275042753174864E+01 + -0.2274888023903062E+01 + -0.2274731829861055E+01 + -0.2274574175627814E+01 + -0.2274415065747386E+01 + -0.2274254504709693E+01 + -0.2274092497000000E+01 + -0.2273929047084592E+01 + -0.2273764159353837E+01 + -0.2273597838179124E+01 + -0.2273430087934993E+01 + -0.2273260913032602E+01 + -0.2273090317906738E+01 + -0.2272918306991708E+01 + -0.2272744884669491E+01 + -0.2272570055240958E+01 + -0.2272393823000000E+01 + -0.2272216192243070E+01 + -0.2272037167276858E+01 + -0.2271856752410614E+01 + -0.2271674951949529E+01 + -0.2271491770151644E+01 + -0.2271307211244575E+01 + -0.2271121279455366E+01 + -0.2270933979007058E+01 + -0.2270745314116499E+01 + -0.2270555289000000E+01 + -0.2270363907840760E+01 + -0.2270171174689535E+01 + -0.2269977093563969E+01 + -0.2269781668489481E+01 + -0.2269584903581891E+01 + -0.2269386803015340E+01 + -0.2269187370964279E+01 + -0.2268986611563452E+01 + -0.2268784528886058E+01 + -0.2268581127000000E+01 + -0.2268376409937409E+01 + -0.2268170381587331E+01 + -0.2267963045803037E+01 + -0.2267754406445491E+01 + -0.2267544467465058E+01 + -0.2267333232869783E+01 + -0.2267120706668153E+01 + -0.2266906892837429E+01 + -0.2266691795306477E+01 + -0.2266475418000000E+01 + -0.2266257764818946E+01 + -0.2266038839569254E+01 + -0.2265818646033106E+01 + -0.2265597187993003E+01 + -0.2265374469235104E+01 + -0.2265150493547930E+01 + -0.2264925264719764E+01 + -0.2264698786522228E+01 + -0.2264471062701115E+01 + -0.2264242097000000E+01 + -0.2264011893164384E+01 + -0.2263780454947484E+01 + -0.2263547786104449E+01 + -0.2263313890382359E+01 + -0.2263078771434548E+01 + -0.2262842432853862E+01 + -0.2262604878232102E+01 + -0.2262366111158719E+01 + -0.2262126135219521E+01 + -0.2261884954000000E+01 + -0.2261642571090100E+01 + -0.2261398990097557E+01 + -0.2261154214634553E+01 + -0.2260908248308315E+01 + -0.2260661094668422E+01 + -0.2260412757227266E+01 + -0.2260163239495930E+01 + -0.2259912544944376E+01 + -0.2259660676978821E+01 + -0.2259407639000000E+01 + -0.2259153434418407E+01 + -0.2258898066683573E+01 + -0.2258641539254791E+01 + -0.2258383855585269E+01 + -0.2258125019057493E+01 + -0.2257865033008322E+01 + -0.2257603900774535E+01 + -0.2257341625733731E+01 + -0.2257078211326782E+01 + -0.2256813661000000E+01 + -0.2256547978146755E+01 + -0.2256281165948638E+01 + -0.2256013227534298E+01 + -0.2255744166041688E+01 + -0.2255473984716945E+01 + -0.2255202686876002E+01 + -0.2254930275835261E+01 + -0.2254656754869599E+01 + -0.2254382127189522E+01 + -0.2254106396000000E+01 + -0.2253829564495345E+01 + -0.2253551635827241E+01 + -0.2253272613136711E+01 + -0.2252992499558950E+01 + -0.2252711298161355E+01 + -0.2252429011967585E+01 + -0.2252145644001878E+01 + -0.2251861197367117E+01 + -0.2251575675288071E+01 + -0.2251289081000000E+01 + -0.2251001417670290E+01 + -0.2250712688194853E+01 + -0.2250422895401730E+01 + -0.2250132042132914E+01 + -0.2249840131392596E+01 + -0.2249547166289609E+01 + -0.2249253149933068E+01 + -0.2248958085344336E+01 + -0.2248661975408763E+01 + -0.2248364823000000E+01 + -0.2248066630994558E+01 + -0.2247767402280399E+01 + -0.2247467139748346E+01 + -0.2247165846289530E+01 + -0.2246863524798661E+01 + -0.2246560178172756E+01 + -0.2246255809307611E+01 + -0.2245950421023428E+01 + -0.2245644016023240E+01 + -0.2245336597000000E+01 + -0.2245028166673692E+01 + -0.2244718727872415E+01 + -0.2244408283451301E+01 + -0.2244096836259522E+01 + -0.2243784389077018E+01 + -0.2243470944639062E+01 + -0.2243156505679155E+01 + -0.2242841074869409E+01 + -0.2242524654786770E+01 + -0.2242207248000000E+01 + -0.2241888857100472E+01 + -0.2241569484770002E+01 + -0.2241249133713013E+01 + -0.2240927806631321E+01 + -0.2240605506196375E+01 + -0.2240282235060040E+01 + -0.2239957995872319E+01 + -0.2239632791191325E+01 + -0.2239306623432742E+01 + -0.2238979495000000E+01 + -0.2238651408335748E+01 + -0.2238322366039510E+01 + -0.2237992370750026E+01 + -0.2237661425095809E+01 + -0.2237329531586459E+01 + -0.2236996692654858E+01 + -0.2236662910732274E+01 + -0.2236328188229688E+01 + -0.2235992527526650E+01 + -0.2235655931000000E+01 + -0.2235318401043613E+01 + -0.2234979940119482E+01 + -0.2234640550706635E+01 + -0.2234300235274616E+01 + -0.2233958996182765E+01 + -0.2233616835719324E+01 + -0.2233273756171456E+01 + -0.2232929759832881E+01 + -0.2232584849007478E+01 + -0.2232239026000000E+01 + -0.2231892293108395E+01 + -0.2231544652603402E+01 + -0.2231196106748953E+01 + -0.2230846657808173E+01 + -0.2230496308034756E+01 + -0.2230145059676315E+01 + -0.2229792914980018E+01 + -0.2229439876172482E+01 + -0.2229085945448469E+01 + -0.2228731125000000E+01 + -0.2228375417004826E+01 + -0.2228018823583621E+01 + -0.2227661346842790E+01 + -0.2227302988892390E+01 + -0.2226943751884934E+01 + -0.2226583638000325E+01 + -0.2226222649417627E+01 + -0.2225860788238048E+01 + -0.2225498056442122E+01 + -0.2225134456000000E+01 + -0.2224769988901649E+01 + -0.2224404657216285E+01 + -0.2224038463032935E+01 + -0.2223671408435529E+01 + -0.2223303495448692E+01 + -0.2222934726058798E+01 + -0.2222565102251394E+01 + -0.2222194626001033E+01 + -0.2221823299265222E+01 + -0.2221451124000000E+01 + -0.2221078102144419E+01 + -0.2220704235569574E+01 + -0.2220329526129572E+01 + -0.2219953975684122E+01 + -0.2219577586158047E+01 + -0.2219200359518177E+01 + -0.2218822297730875E+01 + -0.2218443402692217E+01 + -0.2218063676189337E+01 + -0.2217683120000000E+01 + -0.2217301735901578E+01 + -0.2216919525669874E+01 + -0.2216536491080301E+01 + -0.2216152633910106E+01 + -0.2215767955957879E+01 + -0.2215382459035979E+01 + -0.2214996144956093E+01 + -0.2214609015475698E+01 + -0.2214221072268257E+01 + -0.2213832317000000E+01 + -0.2213442751347535E+01 + -0.2213052377028969E+01 + -0.2212661195772783E+01 + -0.2212269209302391E+01 + -0.2211876419282281E+01 + -0.2211482827338929E+01 + -0.2211088435098326E+01 + -0.2210693244195467E+01 + -0.2210297256279307E+01 + -0.2209900473000000E+01 + -0.2209502895981597E+01 + -0.2209104526743743E+01 + -0.2208705366779980E+01 + -0.2208305417589585E+01 + -0.2207904680738505E+01 + -0.2207503157835701E+01 + -0.2207100850489952E+01 + -0.2206697760255984E+01 + -0.2206293888604751E+01 + -0.2205889237000000E+01 + -0.2205483806902409E+01 + -0.2205077599760381E+01 + -0.2204670617019253E+01 + -0.2204262860127205E+01 + -0.2203854330565468E+01 + -0.2203445029836593E+01 + -0.2203034959442183E+01 + -0.2202624120805363E+01 + -0.2202212515227626E+01 + -0.2201800144000000E+01 + -0.2201387008437171E+01 + -0.2200973109948460E+01 + -0.2200558449966843E+01 + -0.2200143029915723E+01 + -0.2199726851107177E+01 + -0.2199309914781465E+01 + -0.2198892222178556E+01 + -0.2198473774593136E+01 + -0.2198054573404690E+01 + -0.2197634620000000E+01 + -0.2197213915726687E+01 + -0.2196792461775725E+01 + -0.2196370259298928E+01 + -0.2195947309455228E+01 + -0.2195523613486310E+01 + -0.2195099172687249E+01 + -0.2194673988352900E+01 + -0.2194248061711588E+01 + -0.2193821393888512E+01 + -0.2193393986000000E+01 + -0.2192965839177113E+01 + -0.2192536954609840E+01 + -0.2192107333502903E+01 + -0.2191676977052434E+01 + -0.2191245886354712E+01 + -0.2190814062441597E+01 + -0.2190381506344626E+01 + -0.2189948219140276E+01 + -0.2189514201974690E+01 + -0.2189079456000000E+01 + -0.2188643982343431E+01 + -0.2188207782032572E+01 + -0.2187770856070102E+01 + -0.2187333205458228E+01 + -0.2186894831193688E+01 + -0.2186455734269694E+01 + -0.2186015915679552E+01 + -0.2185575376426042E+01 + -0.2185134117526618E+01 + -0.2184692140000000E+01 + -0.2184249444849449E+01 + -0.2183806033016397E+01 + -0.2183361905426820E+01 + -0.2182917063007749E+01 + -0.2182471506698505E+01 + -0.2182025237446338E+01 + -0.2181578256197672E+01 + -0.2181130563841569E+01 + -0.2180682161178179E+01 + -0.2180233049000000E+01 + -0.2179783228118220E+01 + -0.2179332699418770E+01 + -0.2178881463806269E+01 + -0.2178429522178838E+01 + -0.2177976875359051E+01 + -0.2177523524120748E+01 + -0.2177069469237511E+01 + -0.2176614711516351E+01 + -0.2176159251816087E+01 + -0.2175703091000000E+01 + -0.2175246229893130E+01 + -0.2174788669167576E+01 + -0.2174330409457197E+01 + -0.2173871451404716E+01 + -0.2173411795755853E+01 + -0.2172951443322774E+01 + -0.2172490394917746E+01 + -0.2172028651292199E+01 + -0.2171566213103273E+01 + -0.2171103081000000E+01 + -0.2170639255630006E+01 + -0.2170174737635295E+01 + -0.2169709527656469E+01 + -0.2169243626335904E+01 + -0.2168777034336624E+01 + -0.2168309752334975E+01 + -0.2167841781006688E+01 + -0.2167373120977332E+01 + -0.2166903772794726E+01 + -0.2166433737000000E+01 + -0.2165963014137582E+01 + -0.2165491604765085E+01 + -0.2165019509443422E+01 + -0.2164546728736283E+01 + -0.2164073263239691E+01 + -0.2163599113570521E+01 + -0.2163124280344486E+01 + -0.2162648764086543E+01 + -0.2162172565180985E+01 + -0.2161695684000000E+01 + -0.2161218120961751E+01 + -0.2160739876668280E+01 + -0.2160260951767603E+01 + -0.2159781346889349E+01 + -0.2159301062449446E+01 + -0.2158820098725941E+01 + -0.2158338455996076E+01 + -0.2157856134626436E+01 + -0.2157373135122084E+01 + -0.2156889458000000E+01 + -0.2156405103759388E+01 + -0.2155920072828358E+01 + -0.2155434365617245E+01 + -0.2154947982529539E+01 + -0.2154460923889129E+01 + -0.2153973189968546E+01 + -0.2153484781040549E+01 + -0.2152995697442816E+01 + -0.2152505939613647E+01 + -0.2152015508000000E+01 + -0.2151524403009086E+01 + -0.2151032624889147E+01 + -0.2150540173848681E+01 + -0.2150047050102630E+01 + -0.2149553253940891E+01 + -0.2149058785701710E+01 + -0.2148563645723390E+01 + -0.2148067834299135E+01 + -0.2147571351652243E+01 + -0.2147074198000000E+01 + -0.2146576373565111E+01 + -0.2146077878591960E+01 + -0.2145578713330351E+01 + -0.2145078878029677E+01 + -0.2144578372934566E+01 + -0.2144077198286567E+01 + -0.2143575354326184E+01 + -0.2143072841234181E+01 + -0.2142569659098720E+01 + -0.2142065808000000E+01 + -0.2141561288046137E+01 + -0.2141056099456921E+01 + -0.2140550242480061E+01 + -0.2140043717354141E+01 + -0.2139536524211694E+01 + -0.2139028663116827E+01 + -0.2138520134133036E+01 + -0.2138010937355466E+01 + -0.2137501072928315E+01 + -0.2136990541000000E+01 + -0.2136479341692763E+01 + -0.2135967475024141E+01 + -0.2135454940985493E+01 + -0.2134941739578983E+01 + -0.2134427870932373E+01 + -0.2133913335254454E+01 + -0.2133398132752938E+01 + -0.2132882263489580E+01 + -0.2132365727299911E+01 + -0.2131848524000000E+01 + -0.2131330653470168E+01 + -0.2130812115847744E+01 + -0.2130292911334307E+01 + -0.2129773040114748E+01 + -0.2129252502179936E+01 + -0.2128731297395571E+01 + -0.2128209425626227E+01 + -0.2127686886794395E+01 + -0.2127163680912328E+01 + -0.2126639808000000E+01 + -0.2126115268056473E+01 + -0.2125590060997150E+01 + -0.2125064186716517E+01 + -0.2124537645110127E+01 + -0.2124010436085928E+01 + -0.2123482559559860E+01 + -0.2122954015448242E+01 + -0.2122424803681883E+01 + -0.2121894924214065E+01 + -0.2121364377000000E+01 + -0.2120833161965209E+01 + -0.2120301278916460E+01 + -0.2119768727630826E+01 + -0.2119235507894640E+01 + -0.2118701619601818E+01 + -0.2118167062715687E+01 + -0.2117631837199203E+01 + -0.2117095942923657E+01 + -0.2116559379618260E+01 + -0.2116022147000000E+01 + -0.2115484244811628E+01 + -0.2114945672898944E+01 + -0.2114406431133510E+01 + -0.2113866519384578E+01 + -0.2113325937494532E+01 + -0.2112784685288423E+01 + -0.2112242762590214E+01 + -0.2111700169175954E+01 + -0.2111156904747419E+01 + -0.2110612969000000E+01 + -0.2110068361642134E+01 + -0.2109523082434454E+01 + -0.2108977131150640E+01 + -0.2108430507563297E+01 + -0.2107883211432519E+01 + -0.2107335242510327E+01 + -0.2106786600548664E+01 + -0.2106237285302761E+01 + -0.2105687296532949E+01 + -0.2105136634000000E+01 + -0.2104585297435393E+01 + -0.2104033286453451E+01 + -0.2103480600639205E+01 + -0.2102927239587965E+01 + -0.2102373203014482E+01 + -0.2101818490710573E+01 + -0.2101263102468282E+01 + -0.2100707038016499E+01 + -0.2100150296986215E+01 + -0.2099592879000000E+01 + -0.2099034783678433E+01 + -0.2098476010634125E+01 + -0.2097916559477694E+01 + -0.2097356429822541E+01 + -0.2096795621314408E+01 + -0.2096234133619901E+01 + -0.2095671966405658E+01 + -0.2095109119319282E+01 + -0.2094545591978875E+01 + -0.2093981384000000E+01 + -0.2093416494996093E+01 + -0.2092850924572072E+01 + -0.2092284672330729E+01 + -0.2091717737871913E+01 + -0.2091150120761311E+01 + -0.2090581820542565E+01 + -0.2090012836759499E+01 + -0.2089443168988837E+01 + -0.2088872816858302E+01 + -0.2088301780000000E+01 + -0.2087730058023738E+01 + -0.2087157650450109E+01 + -0.2086584556777409E+01 + -0.2086010776509975E+01 + -0.2085436309222428E+01 + -0.2084861154534733E+01 + -0.2084285312066413E+01 + -0.2083708781365179E+01 + -0.2083131561867433E+01 + -0.2082553653000000E+01 + -0.2081975054217566E+01 + -0.2081395765086246E+01 + -0.2080815785200013E+01 + -0.2080235114145400E+01 + -0.2079653751422429E+01 + -0.2079071696475309E+01 + -0.2078488948748007E+01 + -0.2077905507725838E+01 + -0.2077321372958198E+01 + -0.2076736544000000E+01 + -0.2076151020383849E+01 + -0.2075564801553126E+01 + -0.2074977886928910E+01 + -0.2074390275937199E+01 + -0.2073801968061233E+01 + -0.2073212962821180E+01 + -0.2072623259737184E+01 + -0.2072032858291251E+01 + -0.2071441757906258E+01 + -0.2070849958000000E+01 + -0.2070257457988312E+01 + -0.2069664257279195E+01 + -0.2069070355278691E+01 + -0.2068475751400249E+01 + -0.2067880445143427E+01 + -0.2067284436063338E+01 + -0.2066687723714388E+01 + -0.2066090307553120E+01 + -0.2065492186884389E+01 + -0.2064893361000000E+01 + -0.2064293829234915E+01 + -0.2063693591096716E+01 + -0.2063092646136145E+01 + -0.2062490993889842E+01 + -0.2061888633730547E+01 + -0.2061285564925258E+01 + -0.2060681786740662E+01 + -0.2060077298530513E+01 + -0.2059472099783520E+01 + -0.2058866190000000E+01 + -0.2058259568652134E+01 + -0.2057652235099553E+01 + -0.2057044188673750E+01 + -0.2056435428711958E+01 + -0.2055825954618126E+01 + -0.2055215765839243E+01 + -0.2054604861822190E+01 + -0.2053993241964205E+01 + -0.2053380905585584E+01 + -0.2052767852000000E+01 + -0.2052154080537116E+01 + -0.2051539590590535E+01 + -0.2050924381569852E+01 + -0.2050308452880330E+01 + -0.2049691803876924E+01 + -0.2049074433882133E+01 + -0.2048456342218485E+01 + -0.2047837528242814E+01 + -0.2047217991365125E+01 + -0.2046597731000000E+01 + -0.2045976746541874E+01 + -0.2045355037304614E+01 + -0.2044732602581943E+01 + -0.2044109441670884E+01 + -0.2043485553906808E+01 + -0.2042860938649830E+01 + -0.2042235595260575E+01 + -0.2041609523105460E+01 + -0.2040982721559878E+01 + -0.2040355190000000E+01 + -0.2039726927780432E+01 + -0.2039097934169535E+01 + -0.2038468208414109E+01 + -0.2037837749769736E+01 + -0.2037206557594087E+01 + -0.2036574631310695E+01 + -0.2035941970343600E+01 + -0.2035308574081301E+01 + -0.2034674441857210E+01 + -0.2034039573000000E+01 + -0.2033403966818677E+01 + -0.2032767622543583E+01 + -0.2032130539385398E+01 + -0.2031492716566843E+01 + -0.2030854153450683E+01 + -0.2030214849490032E+01 + -0.2029574804138212E+01 + -0.2028934016770855E+01 + -0.2028292486643169E+01 + -0.2027650213000000E+01 + -0.2027007195104386E+01 + -0.2026363432292129E+01 + -0.2025718923917216E+01 + -0.2025073669330440E+01 + -0.2024427667845391E+01 + -0.2023780918751660E+01 + -0.2023133421338366E+01 + -0.2022485174890199E+01 + -0.2021836178684996E+01 + -0.2021186432000000E+01 + -0.2020535934131220E+01 + -0.2019884684449723E+01 + -0.2019232682345341E+01 + -0.2018579927202255E+01 + -0.2017926418338973E+01 + -0.2017272155031630E+01 + -0.2016617136555787E+01 + -0.2015961362194787E+01 + -0.2015304831244042E+01 + -0.2014647543000000E+01 + -0.2013989496764166E+01 + -0.2013330691858258E+01 + -0.2012671127609051E+01 + -0.2012010803344291E+01 + -0.2011349718403022E+01 + -0.2010687872131577E+01 + -0.2010025263875738E+01 + -0.2009361892940900E+01 + -0.2008697758569852E+01 + -0.2008032860000000E+01 + -0.2007367196484170E+01 + -0.2006700767336864E+01 + -0.2006033571888004E+01 + -0.2005365609470621E+01 + -0.2004696879453908E+01 + -0.2004027381230380E+01 + -0.2003357114191820E+01 + -0.2002686077662431E+01 + -0.2002014270861674E+01 + -0.2001341693000000E+01 + -0.2000668343318000E+01 + -0.1999994221176823E+01 + -0.1999319325967760E+01 + -0.1998643657079391E+01 + -0.1997967213868776E+01 + -0.1997289995672643E+01 + -0.1996612001826617E+01 + -0.1995933231620686E+01 + -0.1995253684274094E+01 + -0.1994573359000000E+01 + -0.1993892255048866E+01 + -0.1993210371820366E+01 + -0.1992527708751475E+01 + -0.1991844265273043E+01 + -0.1991160040744713E+01 + -0.1990475034480190E+01 + -0.1989789245792093E+01 + -0.1989102673973904E+01 + -0.1988415318289449E+01 + -0.1987727178000000E+01 + -0.1987038252394947E+01 + -0.1986348540876143E+01 + -0.1985658042873558E+01 + -0.1984966757810393E+01 + -0.1984274685031125E+01 + -0.1983581823829447E+01 + -0.1982888173498550E+01 + -0.1982193733352290E+01 + -0.1981498502736559E+01 + -0.1980802481000000E+01 + -0.1980105667503915E+01 + -0.1979408061660220E+01 + -0.1978709662893487E+01 + -0.1978010470618534E+01 + -0.1977310484136798E+01 + -0.1976609702676567E+01 + -0.1975908125466319E+01 + -0.1975205751819006E+01 + -0.1974502581178516E+01 + -0.1973798613000000E+01 + -0.1973093846727472E+01 + -0.1972388281760395E+01 + -0.1971681917487094E+01 + -0.1970974753289832E+01 + -0.1970266788480386E+01 + -0.1969558022325063E+01 + -0.1968848454090853E+01 + -0.1968138083131391E+01 + -0.1967426908934612E+01 + -0.1966714931000000E+01 + -0.1966002148799547E+01 + -0.1965288561695255E+01 + -0.1964574169021636E+01 + -0.1963858970118233E+01 + -0.1963142964383128E+01 + -0.1962426151252171E+01 + -0.1961708530161342E+01 + -0.1960990100516656E+01 + -0.1960270861677684E+01 + -0.1959550813000000E+01 + -0.1958829953849121E+01 + -0.1958108283630326E+01 + -0.1957385801758835E+01 + -0.1956662507650083E+01 + -0.1955938400721985E+01 + -0.1955213480394058E+01 + -0.1954487746086369E+01 + -0.1953761197250493E+01 + -0.1953033833386834E+01 + -0.1952305654000000E+01 + -0.1951576658564167E+01 + -0.1950846846431796E+01 + -0.1950116216924918E+01 + -0.1949384769373429E+01 + -0.1948652503198636E+01 + -0.1947919417880825E+01 + -0.1947185512901460E+01 + -0.1946450787753718E+01 + -0.1945715241948933E+01 + -0.1944978875000000E+01 + -0.1944241686399191E+01 + -0.1943503675556280E+01 + -0.1942764841860413E+01 + -0.1942025184707623E+01 + -0.1941284703573944E+01 + -0.1940543397987025E+01 + -0.1939801267474699E+01 + -0.1939058311524171E+01 + -0.1938314529559668E+01 + -0.1937569921000000E+01 + -0.1936824485286884E+01 + -0.1936078221953663E+01 + -0.1935331130556582E+01 + -0.1934583210646160E+01 + -0.1933834461706292E+01 + -0.1933084883177894E+01 + -0.1932334474502181E+01 + -0.1931583235181392E+01 + -0.1930831164812346E+01 + -0.1930078263000000E+01 + -0.1929324529312814E+01 + -0.1928569963173259E+01 + -0.1927814563967310E+01 + -0.1927058331092059E+01 + -0.1926301264073867E+01 + -0.1925543362522491E+01 + -0.1924784626048868E+01 + -0.1924025054251454E+01 + -0.1923264646709351E+01 + -0.1922503403000000E+01 + -0.1921741322685783E+01 + -0.1920978405268852E+01 + -0.1920214650236304E+01 + -0.1919450057078744E+01 + -0.1918684625327585E+01 + -0.1917918354540565E+01 + -0.1917151244276663E+01 + -0.1916383294143015E+01 + -0.1915614503821395E+01 + -0.1914844873000000E+01 + -0.1914074401322499E+01 + -0.1913303088254457E+01 + -0.1912530933216915E+01 + -0.1911757935645263E+01 + -0.1910984095141720E+01 + -0.1910209411416139E+01 + -0.1909433884179639E+01 + -0.1908657513111758E+01 + -0.1907880297843086E+01 + -0.1907102238000000E+01 + -0.1906323333190289E+01 + -0.1905543582947385E+01 + -0.1904762986786129E+01 + -0.1903981544231606E+01 + -0.1903199254927969E+01 + -0.1902416118596195E+01 + -0.1901632134958106E+01 + -0.1900847303709553E+01 + -0.1900061624506139E+01 + -0.1899275097000000E+01 + -0.1898487720828450E+01 + -0.1897699495569507E+01 + -0.1896910420786366E+01 + -0.1896120496055253E+01 + -0.1895329721103886E+01 + -0.1894538095757722E+01 + -0.1893745619841876E+01 + -0.1892952293063461E+01 + -0.1892158114946680E+01 + -0.1891363085000000E+01 + -0.1890567202792320E+01 + -0.1889770468134252E+01 + -0.1888972880896837E+01 + -0.1888174440935234E+01 + -0.1887375147919930E+01 + -0.1886575001402277E+01 + -0.1885774000933343E+01 + -0.1884972146166471E+01 + -0.1884169436913523E+01 + -0.1883365873000000E+01 + -0.1882561454228924E+01 + -0.1881756180313407E+01 + -0.1880950050944088E+01 + -0.1880143065816607E+01 + -0.1879335224684765E+01 + -0.1878526527339893E+01 + -0.1877716973573275E+01 + -0.1876906563136044E+01 + -0.1876095295717103E+01 + -0.1875283171000000E+01 + -0.1874470188696667E+01 + -0.1873656348632573E+01 + -0.1872841650661573E+01 + -0.1872026094633232E+01 + -0.1871209680347278E+01 + -0.1870392407571284E+01 + -0.1869574276072379E+01 + -0.1868755285623234E+01 + -0.1867935436005108E+01 + -0.1867114727000000E+01 + -0.1866293158394402E+01 + -0.1865470729992791E+01 + -0.1864647441604135E+01 + -0.1863823293039338E+01 + -0.1862998284131780E+01 + -0.1862172414729340E+01 + -0.1861345684680007E+01 + -0.1860518093823777E+01 + -0.1859689641988260E+01 + -0.1858860329000000E+01 + -0.1858030154693402E+01 + -0.1857199118934306E+01 + -0.1856367221596415E+01 + -0.1855534462553178E+01 + -0.1854700841675150E+01 + -0.1853866358831014E+01 + -0.1853031013889256E+01 + -0.1852194806708376E+01 + -0.1851357737131394E+01 + -0.1850519805000000E+01 + -0.1849681010174700E+01 + -0.1848841352591268E+01 + -0.1848000832204294E+01 + -0.1847159448963398E+01 + -0.1846317202760425E+01 + -0.1845474093449947E+01 + -0.1844630120886699E+01 + -0.1843785284972703E+01 + -0.1842939585683266E+01 + -0.1842093023000000E+01 + -0.1841245596890184E+01 + -0.1840397307263752E+01 + -0.1839548154016307E+01 + -0.1838698137046134E+01 + -0.1837847256282741E+01 + -0.1836995511675774E+01 + -0.1836142903175405E+01 + -0.1835289430743095E+01 + -0.1834435094357805E+01 + -0.1833579894000000E+01 + -0.1832723829647762E+01 + -0.1831866901269628E+01 + -0.1831009108831752E+01 + -0.1830150452301608E+01 + -0.1829290931662040E+01 + -0.1828430546905803E+01 + -0.1827569298026246E+01 + -0.1826707185042363E+01 + -0.1825844208012894E+01 + -0.1824980367000000E+01 + -0.1824115662042220E+01 + -0.1823250093083613E+01 + -0.1822383660044615E+01 + -0.1821516362854241E+01 + -0.1820648201541192E+01 + -0.1819779176198485E+01 + -0.1818909286919795E+01 + -0.1818038533774029E+01 + -0.1817166916791695E+01 + -0.1816294436000000E+01 + -0.1815421091441797E+01 + -0.1814546883222523E+01 + -0.1813671811463265E+01 + -0.1812795876277867E+01 + -0.1811919077695993E+01 + -0.1811041415693005E+01 + -0.1810162890244397E+01 + -0.1809283501388124E+01 + -0.1808403249258959E+01 + -0.1807522134000000E+01 + -0.1806640155747355E+01 + -0.1805757314609165E+01 + -0.1804873610686579E+01 + -0.1803989044080703E+01 + -0.1803103614892161E+01 + -0.1802217323221263E+01 + -0.1801330169168594E+01 + -0.1800442152851527E+01 + -0.1799553274413452E+01 + -0.1798663534000000E+01 + -0.1797772931753724E+01 + -0.1796881467804876E+01 + -0.1795989142280633E+01 + -0.1795095955309576E+01 + -0.1794201907036646E+01 + -0.1793306997617330E+01 + -0.1792411227207706E+01 + -0.1791514595988478E+01 + -0.1790617104178522E+01 + -0.1789718752000000E+01 + -0.1788819539652994E+01 + -0.1787919467249273E+01 + -0.1787018534878529E+01 + -0.1786116742637336E+01 + -0.1785214090702286E+01 + -0.1784310579301589E+01 + -0.1783406208664697E+01 + -0.1782500979043629E+01 + -0.1781594890725392E+01 + -0.1780687944000000E+01 + -0.1779780139120612E+01 + -0.1778871476192949E+01 + -0.1777961955285878E+01 + -0.1777051576484939E+01 + -0.1776140340069511E+01 + -0.1775228246444035E+01 + -0.1774315296013064E+01 + -0.1773401489062820E+01 + -0.1772486825696119E+01 + -0.1771571306000000E+01 + -0.1770654930110214E+01 + -0.1769737698357371E+01 + -0.1768819611120794E+01 + -0.1767900668769847E+01 + -0.1766980871558132E+01 + -0.1766060219664562E+01 + -0.1765138713267980E+01 + -0.1764216352617725E+01 + -0.1763293138072398E+01 + -0.1762369070000000E+01 + -0.1761444148756255E+01 + -0.1760518374647766E+01 + -0.1759591747968858E+01 + -0.1758664269011011E+01 + -0.1757735938032623E+01 + -0.1756806755270746E+01 + -0.1755876720962957E+01 + -0.1754945835399492E+01 + -0.1754014098952212E+01 + -0.1753081512000000E+01 + -0.1752148074917554E+01 + -0.1751213788062829E+01 + -0.1750278651789599E+01 + -0.1749342666449574E+01 + -0.1748405832370501E+01 + -0.1747468149864667E+01 + -0.1746529619244288E+01 + -0.1745590240832720E+01 + -0.1744650014970588E+01 + -0.1743708942000000E+01 + -0.1742767022276972E+01 + -0.1741824256213129E+01 + -0.1740880644234002E+01 + -0.1739936186763157E+01 + -0.1738990884201336E+01 + -0.1738044736934553E+01 + -0.1737097745348045E+01 + -0.1736149909795056E+01 + -0.1735201230579244E+01 + -0.1734251708000000E+01 + -0.1733301342393928E+01 + -0.1732350134246480E+01 + -0.1731398084080319E+01 + -0.1730445192410272E+01 + -0.1729491459660053E+01 + -0.1728536886194595E+01 + -0.1727581472378395E+01 + -0.1726625218608377E+01 + -0.1725668125331739E+01 + -0.1724710193000000E+01 + -0.1723751422059755E+01 + -0.1722791812937896E+01 + -0.1721831366056383E+01 + -0.1720870081838698E+01 + -0.1719907960725918E+01 + -0.1718945003170477E+01 + -0.1717981209625424E+01 + -0.1717016580569332E+01 + -0.1716051116520344E+01 + -0.1715084818000000E+01 + -0.1714117685505789E+01 + -0.1713149719438971E+01 + -0.1712180920176747E+01 + -0.1711211288105429E+01 + -0.1710240823717212E+01 + -0.1709269527572603E+01 + -0.1708297400232582E+01 + -0.1707324442218345E+01 + -0.1706350653989412E+01 + -0.1705376036000000E+01 + -0.1704400588718206E+01 + -0.1703424312667637E+01 + -0.1702447208385783E+01 + -0.1701469276406986E+01 + -0.1700490517229049E+01 + -0.1699510931326197E+01 + -0.1698530519173319E+01 + -0.1697549281308769E+01 + -0.1696567218369268E+01 + -0.1695584331000000E+01 + -0.1694600619796524E+01 + -0.1693616085155898E+01 + -0.1692630727425556E+01 + -0.1691644546971285E+01 + -0.1690657544372225E+01 + -0.1689669720345163E+01 + -0.1688681075607842E+01 + -0.1687691610797693E+01 + -0.1686701326427666E+01 + -0.1685710223000000E+01 + -0.1684718301018556E+01 + -0.1683725560993671E+01 + -0.1682732003437301E+01 + -0.1681737628870190E+01 + -0.1680742437915258E+01 + -0.1679746431261340E+01 + -0.1678749609596916E+01 + -0.1677751973523197E+01 + -0.1676753523506123E+01 + -0.1675754260000000E+01 + -0.1674754183505555E+01 + -0.1673753294709211E+01 + -0.1672751594343813E+01 + -0.1671749083130823E+01 + -0.1670745761659358E+01 + -0.1669741630433156E+01 + -0.1668736689955501E+01 + -0.1667730940788046E+01 + -0.1666724383582911E+01 + -0.1665717019000000E+01 + -0.1664708847686576E+01 + -0.1663699870239355E+01 + -0.1662690087242412E+01 + -0.1661679499287019E+01 + -0.1660668107048101E+01 + -0.1659655911254550E+01 + -0.1658642912635028E+01 + -0.1657629111850406E+01 + -0.1656614509456478E+01 + -0.1655599106000000E+01 + -0.1654582902044465E+01 + -0.1653565898220322E+01 + -0.1652548095174756E+01 + -0.1651529493560155E+01 + -0.1650510094089363E+01 + -0.1649489897514229E+01 + -0.1648468904586034E+01 + -0.1647447115982839E+01 + -0.1646424532269223E+01 + -0.1645401154000000E+01 + -0.1644376981763222E+01 + -0.1643352016279893E+01 + -0.1642326258304253E+01 + -0.1641299708584913E+01 + -0.1640272367805027E+01 + -0.1639244236605522E+01 + -0.1638215315627203E+01 + -0.1637185605545933E+01 + -0.1636155107091909E+01 + -0.1635123821000000E+01 + -0.1634091747987982E+01 + -0.1633058888705246E+01 + -0.1632025243784085E+01 + -0.1630990813864381E+01 + -0.1629955599674229E+01 + -0.1628919601998632E+01 + -0.1627882821622381E+01 + -0.1626845259260618E+01 + -0.1625806915520526E+01 + -0.1624767791000000E+01 + -0.1623727886342697E+01 + -0.1622687202375320E+01 + -0.1621645739970334E+01 + -0.1620603499987255E+01 + -0.1619560483135065E+01 + -0.1618516690025628E+01 + -0.1617472121269969E+01 + -0.1616426777525896E+01 + -0.1615380659523722E+01 + -0.1614333768000000E+01 + -0.1613286103704781E+01 + -0.1612237667442110E+01 + -0.1611188460029534E+01 + -0.1610138482278360E+01 + -0.1609087734927406E+01 + -0.1608036218668719E+01 + -0.1606983934194187E+01 + -0.1605930882232775E+01 + -0.1604877063570918E+01 + -0.1603822479000000E+01 + -0.1602767129292704E+01 + -0.1601711015146935E+01 + -0.1600654137241899E+01 + -0.1599596496266019E+01 + -0.1598538093014826E+01 + -0.1597478928352959E+01 + -0.1596419003145290E+01 + -0.1595358318201824E+01 + -0.1594296874247515E+01 + -0.1593234672000000E+01 + -0.1592171712190587E+01 + -0.1591107995605267E+01 + -0.1590043523043699E+01 + -0.1588978295304656E+01 + -0.1587912313176616E+01 + -0.1586845577441413E+01 + -0.1585778088880705E+01 + -0.1584709848272347E+01 + -0.1583640856388295E+01 + -0.1582571114000000E+01 + -0.1581500621888749E+01 + -0.1580429380875183E+01 + -0.1579357391789781E+01 + -0.1578284655459867E+01 + -0.1577211172676119E+01 + -0.1576136944205565E+01 + -0.1575061970815052E+01 + -0.1573986253284148E+01 + -0.1572909792412137E+01 + -0.1571832589000000E+01 + -0.1570754643863461E+01 + -0.1569675957877220E+01 + -0.1568596531930717E+01 + -0.1567516366902225E+01 + -0.1566435463540167E+01 + -0.1565353822509188E+01 + -0.1564271444474579E+01 + -0.1563188330223963E+01 + -0.1562104480734586E+01 + -0.1561019897000000E+01 + -0.1559934579966257E+01 + -0.1558848530389391E+01 + -0.1557761748977933E+01 + -0.1556674236448403E+01 + -0.1555585993610203E+01 + -0.1554497021332657E+01 + -0.1553407320485851E+01 + -0.1552316891925746E+01 + -0.1551225736486403E+01 + -0.1550133855000000E+01 + -0.1549041248297180E+01 + -0.1547947917202443E+01 + -0.1546853862538755E+01 + -0.1545759085132785E+01 + -0.1544663585854254E+01 + -0.1543567365600660E+01 + -0.1542470425269169E+01 + -0.1541372765709254E+01 + -0.1540274387696468E+01 + -0.1539175292000000E+01 + -0.1538075479408390E+01 + -0.1536974950787563E+01 + -0.1535873707022791E+01 + -0.1534771748998774E+01 + -0.1533669077593584E+01 + -0.1532565693681013E+01 + -0.1531461598134353E+01 + -0.1530356791801011E+01 + -0.1529251275488280E+01 + -0.1528145050000000E+01 + -0.1527038116161524E+01 + -0.1525930474884255E+01 + -0.1524822127101110E+01 + -0.1523713073738958E+01 + -0.1522603315654392E+01 + -0.1521492853658664E+01 + -0.1520381688562495E+01 + -0.1519269821190165E+01 + -0.1518157252386967E+01 + -0.1517043983000000E+01 + -0.1515930013899365E+01 + -0.1514815346047166E+01 + -0.1513699980428503E+01 + -0.1512583918015414E+01 + -0.1511467159628024E+01 + -0.1510349705988457E+01 + -0.1509231557818884E+01 + -0.1508112715942382E+01 + -0.1506993181338440E+01 + -0.1505872955000000E+01 + -0.1504752037890471E+01 + -0.1503630430855129E+01 + -0.1502508134709716E+01 + -0.1501385150275524E+01 + -0.1500261478438336E+01 + -0.1499137120125547E+01 + -0.1498012076264561E+01 + -0.1496886347741980E+01 + -0.1495759935381156E+01 + -0.1494632840000000E+01 + -0.1493505062444148E+01 + -0.1492376603670145E+01 + -0.1491247464662260E+01 + -0.1490117646393341E+01 + -0.1488987149703478E+01 + -0.1487855975347111E+01 + -0.1486724124078935E+01 + -0.1485591596754634E+01 + -0.1484458394386428E+01 + -0.1483324518000000E+01 + -0.1482189968585797E+01 + -0.1481054746993308E+01 + -0.1479918854036782E+01 + -0.1478782290534770E+01 + -0.1477645057355801E+01 + -0.1476507155400656E+01 + -0.1475368585570806E+01 + -0.1474229348777042E+01 + -0.1473089445944611E+01 + -0.1471948878000000E+01 + -0.1470807645865403E+01 + -0.1469665750445848E+01 + -0.1468523192642071E+01 + -0.1467379973350649E+01 + -0.1466236093419846E+01 + -0.1465091553666754E+01 + -0.1463946354909183E+01 + -0.1462800498039163E+01 + -0.1461653984063777E+01 + -0.1460506814000000E+01 + -0.1459358988826232E+01 + -0.1458210509366572E+01 + -0.1457061376406544E+01 + -0.1455911590743493E+01 + -0.1454761153312203E+01 + -0.1453610065136127E+01 + -0.1452458327238713E+01 + -0.1451305940554454E+01 + -0.1450152905879966E+01 + -0.1448999224000000E+01 + -0.1447844895738527E+01 + -0.1446689922076386E+01 + -0.1445534304033635E+01 + -0.1444378042619713E+01 + -0.1443221138720608E+01 + -0.1442063593142665E+01 + -0.1440905406691760E+01 + -0.1439746580225193E+01 + -0.1438587114679982E+01 + -0.1437427011000000E+01 + -0.1436266270126389E+01 + -0.1435104892989370E+01 + -0.1433942880516432E+01 + -0.1432780233631445E+01 + -0.1431616953216184E+01 + -0.1430453040125271E+01 + -0.1429288495213785E+01 + -0.1428123319391497E+01 + -0.1426957513652955E+01 + -0.1425791079000000E+01 + -0.1424624016402243E+01 + -0.1423456326700384E+01 + -0.1422288010702899E+01 + -0.1421119069225162E+01 + -0.1419949503162802E+01 + -0.1418779313463225E+01 + -0.1417608501074440E+01 + -0.1416437066928970E+01 + -0.1415265011935337E+01 + -0.1414092337000000E+01 + -0.1412919043033990E+01 + -0.1411745130966634E+01 + -0.1410570601731837E+01 + -0.1409395456260145E+01 + -0.1408219695443082E+01 + -0.1407043320147001E+01 + -0.1405866331238339E+01 + -0.1404688729614072E+01 + -0.1403510516218501E+01 + -0.1402331692000000E+01 + -0.1401152257890309E+01 + -0.1399972214754637E+01 + -0.1398791563441560E+01 + -0.1397610304807294E+01 + -0.1396428439796895E+01 + -0.1395245969412732E+01 + -0.1394062894656923E+01 + -0.1392879216459293E+01 + -0.1391694935637609E+01 + -0.1390510053000000E+01 + -0.1389324569377933E+01 + -0.1388138485696231E+01 + -0.1386951802903059E+01 + -0.1385764521944559E+01 + -0.1384576643743364E+01 + -0.1383388169206948E+01 + -0.1382199099242673E+01 + -0.1381009434766700E+01 + -0.1379819176708820E+01 + -0.1378628326000000E+01 + -0.1377436883562196E+01 + -0.1376244850281338E+01 + -0.1375052227034348E+01 + -0.1373859014699651E+01 + -0.1372665214173136E+01 + -0.1371470826361963E+01 + -0.1370275852173063E+01 + -0.1369080292488305E+01 + -0.1367884148150720E+01 + -0.1366687420000000E+01 + -0.1365490108915868E+01 + -0.1364292215938181E+01 + -0.1363093742146836E+01 + -0.1361894688601617E+01 + -0.1360695056128575E+01 + -0.1359494845402958E+01 + -0.1358294057100076E+01 + -0.1357092692049466E+01 + -0.1355890751319721E+01 + -0.1354688236000000E+01 + -0.1353485147131707E+01 + -0.1352281485565226E+01 + -0.1351077252103188E+01 + -0.1349872447552257E+01 + -0.1348667072765994E+01 + -0.1347461128628214E+01 + -0.1346254616023994E+01 + -0.1345047535883502E+01 + -0.1343839889206808E+01 + -0.1342631677000000E+01 + -0.1341422900228370E+01 + -0.1340213559694048E+01 + -0.1339003656158378E+01 + -0.1337793190393031E+01 + -0.1336582163289782E+01 + -0.1335370575817889E+01 + -0.1334158428947251E+01 + -0.1332945723608468E+01 + -0.1331732460671232E+01 + -0.1330518641000000E+01 + -0.1329304265468088E+01 + -0.1328089334984263E+01 + -0.1326873850466160E+01 + -0.1325657812826144E+01 + -0.1324441222915379E+01 + -0.1323224081545541E+01 + -0.1322006389528953E+01 + -0.1320788147756187E+01 + -0.1319569357239105E+01 + -0.1318350019000000E+01 + -0.1317130134019084E+01 + -0.1315909703108246E+01 + -0.1314688727037291E+01 + -0.1313467206583467E+01 + -0.1312245142610519E+01 + -0.1311022536037997E+01 + -0.1309799387786221E+01 + -0.1308575698765801E+01 + -0.1307351469872304E+01 + -0.1306126702000000E+01 + -0.1304901396035521E+01 + -0.1303675552834942E+01 + -0.1302449173246697E+01 + -0.1301222258121571E+01 + -0.1299994808337645E+01 + -0.1298766824790614E+01 + -0.1297538308376578E+01 + -0.1296309259998158E+01 + -0.1295079680568095E+01 + -0.1293849571000000E+01 + -0.1292618932187809E+01 + -0.1291387764946766E+01 + -0.1290156070072442E+01 + -0.1288923848366855E+01 + -0.1287691100706958E+01 + -0.1286457828018051E+01 + -0.1285224031225746E+01 + -0.1283989711225988E+01 + -0.1282754868868737E+01 + -0.1281519505000000E+01 + -0.1280283620470426E+01 + -0.1279047216149243E+01 + -0.1277810292910321E+01 + -0.1276572851625983E+01 + -0.1275334893150548E+01 + -0.1274096418326718E+01 + -0.1272857427997606E+01 + -0.1271617923042465E+01 + -0.1270377904396566E+01 + -0.1269137373000000E+01 + -0.1267896329760031E+01 + -0.1266654775452614E+01 + -0.1265412710820875E+01 + -0.1264170136618031E+01 + -0.1262927053714562E+01 + -0.1261683463056608E+01 + -0.1260439365590743E+01 + -0.1259194762213860E+01 + -0.1257949653745855E+01 + -0.1256704041000000E+01 + -0.1255457924790940E+01 + -0.1254211305938815E+01 + -0.1252964185265136E+01 + -0.1251716563596416E+01 + -0.1250468441817235E+01 + -0.1249219820849645E+01 + -0.1247970701615773E+01 + -0.1246721085004823E+01 + -0.1245470971854970E+01 + -0.1244220363000000E+01 + -0.1242969259262098E+01 + -0.1241717661417047E+01 + -0.1240465570229029E+01 + -0.1239212986472365E+01 + -0.1237959911039235E+01 + -0.1236706344897856E+01 + -0.1235452289016072E+01 + -0.1234197744263359E+01 + -0.1232942711356708E+01 + -0.1231687191000000E+01 + -0.1230431183931967E+01 + -0.1229174691030756E+01 + -0.1227917713209367E+01 + -0.1226660251376609E+01 + -0.1225402306392562E+01 + -0.1224143879085871E+01 + -0.1222884970284460E+01 + -0.1221625580804550E+01 + -0.1220365711444224E+01 + -0.1219105363000000E+01 + -0.1217844536276614E+01 + -0.1216583232111649E+01 + -0.1215321451350902E+01 + -0.1214059194839997E+01 + -0.1212796463422545E+01 + -0.1211533257940861E+01 + -0.1210269579237019E+01 + -0.1209005428140036E+01 + -0.1207740805458685E+01 + -0.1206475712000000E+01 + -0.1205210148568104E+01 + -0.1203944115955483E+01 + -0.1202677614951710E+01 + -0.1201410646351552E+01 + -0.1200143211010102E+01 + -0.1198875309821379E+01 + -0.1197606943678562E+01 + -0.1196338113385605E+01 + -0.1195068819608165E+01 + -0.1193799063000000E+01 + -0.1192528844276960E+01 + -0.1191258164403251E+01 + -0.1189987024405169E+01 + -0.1188715425287321E+01 + -0.1187443367802154E+01 + -0.1186170852539436E+01 + -0.1184897880088769E+01 + -0.1183624451192505E+01 + -0.1182350566829755E+01 + -0.1181076228000000E+01 + -0.1179801435635976E+01 + -0.1178526190403452E+01 + -0.1177250492901456E+01 + -0.1175974343747751E+01 + -0.1174697743777893E+01 + -0.1173420693967952E+01 + -0.1172143195294443E+01 + -0.1170865248620148E+01 + -0.1169586854631558E+01 + -0.1168308014000000E+01 + -0.1167028727430292E+01 + -0.1165748995761224E+01 + -0.1164468819865078E+01 + -0.1163188200605606E+01 + -0.1161907138747396E+01 + -0.1160625634991061E+01 + -0.1159343690037170E+01 + -0.1158061304647772E+01 + -0.1156778479680204E+01 + -0.1155495216000000E+01 + -0.1154211514444824E+01 + -0.1152927375740863E+01 + -0.1151642800586437E+01 + -0.1150357789688697E+01 + -0.1149072343857482E+01 + -0.1147786463968879E+01 + -0.1146500150898698E+01 + -0.1145213405439679E+01 + -0.1143926228255810E+01 + -0.1142638620000000E+01 + -0.1141350581363870E+01 + -0.1140062113193874E+01 + -0.1138773216375176E+01 + -0.1137483891782136E+01 + -0.1136194140163552E+01 + -0.1134903962187210E+01 + -0.1133613358520515E+01 + -0.1132322329888890E+01 + -0.1131030877107689E+01 + -0.1129739001000000E+01 + -0.1128446702374932E+01 + -0.1127153981985673E+01 + -0.1125860840571426E+01 + -0.1124567278872232E+01 + -0.1123273297637822E+01 + -0.1121978897624180E+01 + -0.1120684079587495E+01 + -0.1119388844290013E+01 + -0.1118093192503368E+01 + -0.1116797125000000E+01 + -0.1115500642538635E+01 + -0.1114203745823137E+01 + -0.1112906435543652E+01 + -0.1111608712397774E+01 + -0.1110310577169684E+01 + -0.1109012030699421E+01 + -0.1107713073826740E+01 + -0.1106413707318434E+01 + -0.1105113931828197E+01 + -0.1103813748000000E+01 + -0.1102513156503008E+01 + -0.1101212158107179E+01 + -0.1099910753607666E+01 + -0.1098608943795489E+01 + -0.1097306729413595E+01 + -0.1096004111173911E+01 + -0.1094701089787987E+01 + -0.1093397665975437E+01 + -0.1092093840468378E+01 + -0.1090789614000000E+01 + -0.1089484987302934E+01 + -0.1088179961107561E+01 + -0.1086874536143699E+01 + -0.1085568713140757E+01 + -0.1084262492823388E+01 + -0.1082955875913180E+01 + -0.1081648863131893E+01 + -0.1080341455214807E+01 + -0.1079033652918162E+01 + -0.1077725457000000E+01 + -0.1076416868195404E+01 + -0.1075107887147631E+01 + -0.1073798514476979E+01 + -0.1072488750813151E+01 + -0.1071178596895195E+01 + -0.1069868053532698E+01 + -0.1068557121535573E+01 + -0.1067245801662576E+01 + -0.1065934094593171E+01 + -0.1064622001000000E+01 + -0.1063309521562044E+01 + -0.1061996656983628E+01 + -0.1060683407975417E+01 + -0.1059369775247382E+01 + -0.1058055759501486E+01 + -0.1056741361434520E+01 + -0.1055426581743298E+01 + -0.1054111421131234E+01 + -0.1052795880311963E+01 + -0.1051479960000000E+01 + -0.1050163660900314E+01 + -0.1048846983679685E+01 + -0.1047529928995343E+01 + -0.1046212497506956E+01 + -0.1044894689902508E+01 + -0.1043576506888254E+01 + -0.1042257949170889E+01 + -0.1040939017465246E+01 + -0.1039619712498773E+01 + -0.1038300035000000E+01 + -0.1036979985674591E+01 + -0.1035659565136727E+01 + -0.1034338773977721E+01 + -0.1033017612798903E+01 + -0.1031696082318092E+01 + -0.1030374183328254E+01 + -0.1029051916622448E+01 + -0.1027729282923947E+01 + -0.1026406282847862E+01 + -0.1025082917000000E+01 + -0.1023759185996958E+01 + -0.1022435090498499E+01 + -0.1021110631175178E+01 + -0.1019785808702063E+01 + -0.1018460623806708E+01 + -0.1017135077250522E+01 + -0.1015809169793826E+01 + -0.1014482902097518E+01 + -0.1013156274668396E+01 + -0.1011829288000000E+01 + -0.1010501942641590E+01 + -0.1009174239365308E+01 + -0.1007846178999014E+01 + -0.1006517762357785E+01 + -0.1005188990108106E+01 + -0.1003859862820590E+01 + -0.1002530381064983E+01 + -0.1001200545454678E+01 + -0.9998703566707270E+00 + -0.9985398154000000E+00 + -0.9972089223209386E+00 + -0.9958776780782726E+00 + -0.9945460833083024E+00 + -0.9932141386482966E+00 + -0.9918818447467938E+00 + -0.9905492022595992E+00 + -0.9892162118425677E+00 + -0.9878828741472070E+00 + -0.9865491898182878E+00 + -0.9852151595000001E+00 + -0.9838807838356873E+00 + -0.9825460634653080E+00 + -0.9812109990279721E+00 + -0.9798755911627733E+00 + -0.9785398405086077E+00 + -0.9772037477042447E+00 + -0.9758673133883903E+00 + -0.9745305381961419E+00 + -0.9731934227570044E+00 + -0.9718559677000000E+00 + -0.9705181736553049E+00 + -0.9691800412577081E+00 + -0.9678415711431503E+00 + -0.9665027639466876E+00 + -0.9651636202930826E+00 + -0.9638241408004584E+00 + -0.9624843260869264E+00 + -0.9611441767765976E+00 + -0.9598036935028851E+00 + -0.9584628769000000E+00 + -0.9571217275970419E+00 + -0.9557802462026649E+00 + -0.9544384333204093E+00 + -0.9530962895550745E+00 + -0.9517538155260887E+00 + -0.9504110118623194E+00 + -0.9490678791926500E+00 + -0.9477244181375715E+00 + -0.9463806293045671E+00 + -0.9450365133000000E+00 + -0.9436920707302930E+00 + -0.9423473022021092E+00 + -0.9410022083221705E+00 + -0.9396567896974473E+00 + -0.9383110469377945E+00 + -0.9369649806549298E+00 + -0.9356185914604748E+00 + -0.9342718799584715E+00 + -0.9329248467412178E+00 + -0.9315774923999999E+00 + -0.9302298175281065E+00 + -0.9288818227268425E+00 + -0.9275335085995147E+00 + -0.9261848757488663E+00 + -0.9248359247710823E+00 + -0.9234866562581194E+00 + -0.9221370708018700E+00 + -0.9207871689946956E+00 + -0.9194369514296879E+00 + -0.9180864186999999E+00 + -0.9167355713971428E+00 + -0.9153844101060605E+00 + -0.9140329354100556E+00 + -0.9126811478927134E+00 + -0.9113290481409115E+00 + -0.9099766367436535E+00 + -0.9086239142898965E+00 + -0.9072708813637480E+00 + -0.9059175385418008E+00 + -0.9045638863999999E+00 + -0.9032099255139629E+00 + -0.9018556564579978E+00 + -0.9005010798060857E+00 + -0.8991461961324417E+00 + -0.8977910060140081E+00 + -0.8964355100294890E+00 + -0.8950797087575108E+00 + -0.8937236027703886E+00 + -0.8923671926306549E+00 + -0.8910104789000000E+00 + -0.8896534621425833E+00 + -0.8882961429324412E+00 + -0.8869385218460812E+00 + -0.8855805994587236E+00 + -0.8842223763306510E+00 + -0.8828638530125101E+00 + -0.8815050300549363E+00 + -0.8801459080176276E+00 + -0.8787864874743308E+00 + -0.8774267690000000E+00 + -0.8760667531630134E+00 + -0.8747064405054445E+00 + -0.8733458315627921E+00 + -0.8719849268723392E+00 + -0.8706237269921250E+00 + -0.8692622324935812E+00 + -0.8679004439481121E+00 + -0.8665383619121709E+00 + -0.8651759869190382E+00 + -0.8638133195000000E+00 + -0.8624503601910282E+00 + -0.8610871095468378E+00 + -0.8597235681268307E+00 + -0.8583597364892475E+00 + -0.8569956151788427E+00 + -0.8556312047316714E+00 + -0.8542665056836489E+00 + -0.8529015185710810E+00 + -0.8515362439308770E+00 + -0.8501706823000001E+00 + -0.8488048342159255E+00 + -0.8474387002181812E+00 + -0.8460722808468109E+00 + -0.8447055766411959E+00 + -0.8433385881330400E+00 + -0.8419713158490955E+00 + -0.8406037603160421E+00 + -0.8392359220612315E+00 + -0.8378678016130563E+00 + -0.8364993994999999E+00 + -0.8351307162515644E+00 + -0.8337617524013300E+00 + -0.8323925084838987E+00 + -0.8310229850325719E+00 + -0.8296531825655622E+00 + -0.8282831015913480E+00 + -0.8269127426183552E+00 + -0.8255421061616858E+00 + -0.8241711927467875E+00 + -0.8228000029000000E+00 + -0.8214285371454265E+00 + -0.8200567959982321E+00 + -0.8186847799713485E+00 + -0.8173124895778644E+00 + -0.8159399253327099E+00 + -0.8145670877520045E+00 + -0.8131939773517898E+00 + -0.8118205946423215E+00 + -0.8104469401248860E+00 + -0.8090730143000000E+00 + -0.8076988176699590E+00 + -0.8063243507441818E+00 + -0.8049496140338682E+00 + -0.8035746080496788E+00 + -0.8021993332960090E+00 + -0.8008237902732123E+00 + -0.7994479794815801E+00 + -0.7980719014216119E+00 + -0.7966955565941333E+00 + -0.7953189455000000E+00 + -0.7939420686388058E+00 + -0.7925649265051064E+00 + -0.7911875195921988E+00 + -0.7898098483932442E+00 + -0.7884319133998329E+00 + -0.7870537151025417E+00 + -0.7856752539919459E+00 + -0.7842965305594722E+00 + -0.7829175452978689E+00 + -0.7815382987000000E+00 + -0.7801587912576485E+00 + -0.7787790234582821E+00 + -0.7773989957882909E+00 + -0.7760187087336290E+00 + -0.7746381627751933E+00 + -0.7732573583906182E+00 + -0.7718762960575424E+00 + -0.7704949762570510E+00 + -0.7691133994755734E+00 + -0.7677315662000001E+00 + -0.7663494769151821E+00 + -0.7649671320978184E+00 + -0.7635845322225717E+00 + -0.7622016777636585E+00 + -0.7608185691901310E+00 + -0.7594352069677090E+00 + -0.7580515915621553E+00 + -0.7566677234450896E+00 + -0.7552836030972106E+00 + -0.7538992310000000E+00 + -0.7525146076312933E+00 + -0.7511297334543478E+00 + -0.7497446089287782E+00 + -0.7483592345145355E+00 + -0.7469736106755054E+00 + -0.7455877378781111E+00 + -0.7442016165887853E+00 + -0.7428152472719061E+00 + -0.7414286303886697E+00 + -0.7400417664000000E+00 + -0.7386546557666725E+00 + -0.7372672989488769E+00 + -0.7358796964066548E+00 + -0.7344918485996979E+00 + -0.7331037559835991E+00 + -0.7317154190113087E+00 + -0.7303268381357157E+00 + -0.7289380138086059E+00 + -0.7275489464800567E+00 + -0.7261596366000001E+00 + -0.7247700846188394E+00 + -0.7233802909888714E+00 + -0.7219902561628650E+00 + -0.7205999805931773E+00 + -0.7192094647273533E+00 + -0.7178187090098346E+00 + -0.7164277138850021E+00 + -0.7150364797965971E+00 + -0.7136450071873730E+00 + -0.7122532965000000E+00 + -0.7108613481769895E+00 + -0.7094691626602328E+00 + -0.7080767403914646E+00 + -0.7066840818118905E+00 + -0.7052911873565463E+00 + -0.7038980574564885E+00 + -0.7025046925427796E+00 + -0.7011110930507446E+00 + -0.6997172594223169E+00 + -0.6983231921000001E+00 + -0.6969288915231121E+00 + -0.6955343581182365E+00 + -0.6941395923087721E+00 + -0.6927445945189242E+00 + -0.6913493651822543E+00 + -0.6899539047383612E+00 + -0.6885582136267607E+00 + -0.6871622922758943E+00 + -0.6857661410970398E+00 + -0.6843697605000000E+00 + -0.6829731508982913E+00 + -0.6815763127202917E+00 + -0.6801792463980938E+00 + -0.6787819523632646E+00 + -0.6773844310412462E+00 + -0.6759866828535302E+00 + -0.6745887082214694E+00 + -0.6731905075619621E+00 + -0.6717920812850048E+00 + -0.6703934298000000E+00 + -0.6689945535180449E+00 + -0.6675954528570079E+00 + -0.6661961282364509E+00 + -0.6647965800753236E+00 + -0.6633968087854488E+00 + -0.6619968147740504E+00 + -0.6605965984483220E+00 + -0.6591961602180831E+00 + -0.6577955004972279E+00 + -0.6563946197000000E+00 + -0.6549935182379833E+00 + -0.6535921965121130E+00 + -0.6521906549206631E+00 + -0.6507888938623132E+00 + -0.6493869137404392E+00 + -0.6479847149614487E+00 + -0.6465822979317975E+00 + -0.6451796630577302E+00 + -0.6437768107451673E+00 + -0.6423737414000001E+00 + -0.6409704554244358E+00 + -0.6395669532059324E+00 + -0.6381632351282624E+00 + -0.6367593015763963E+00 + -0.6353551529492220E+00 + -0.6339507896546076E+00 + -0.6325462121004099E+00 + -0.6311414206847575E+00 + -0.6297364157907025E+00 + -0.6283311978000000E+00 + -0.6269257670970739E+00 + -0.6255201240770165E+00 + -0.6241142691375876E+00 + -0.6227082026754841E+00 + -0.6213019250750257E+00 + -0.6198954367125491E+00 + -0.6184887379643898E+00 + -0.6170818292148955E+00 + -0.6156747108608235E+00 + -0.6142673832999995E+00 + -0.6128598469248283E+00 + -0.6114521021060236E+00 + -0.6100441492088764E+00 + -0.6086359886000381E+00 + -0.6072276206619547E+00 + -0.6058190457872636E+00 + -0.6044102643685934E+00 + -0.6030012767878596E+00 + -0.6015920834103689E+00 + -0.6001826845999995E+00 + -0.5987730807245312E+00 + -0.5973632721673409E+00 + -0.5959532593157062E+00 + -0.5945430425553119E+00 + -0.5931326222533183E+00 + -0.5917219987649354E+00 + -0.5903111724453256E+00 + -0.5889001436587899E+00 + -0.5874889127837882E+00 + -0.5860774801999994E+00 + -0.5846658462841358E+00 + -0.5832540114010373E+00 + -0.5818419759125764E+00 + -0.5804297401805259E+00 + -0.5790173045654845E+00 + -0.5776046694272940E+00 + -0.5761918351258438E+00 + -0.5747788020246470E+00 + -0.5733655704928293E+00 + -0.5719521408999995E+00 + -0.5705385136122885E+00 + -0.5691246889819086E+00 + -0.5677106673575930E+00 + -0.5662964490885169E+00 + -0.5648820345289762E+00 + -0.5634674240365727E+00 + -0.5620526179689706E+00 + -0.5606376166843484E+00 + -0.5592224205416781E+00 + -0.5578070298999994E+00 + -0.5563914451159442E+00 + -0.5549756665365032E+00 + -0.5535596945062586E+00 + -0.5521435293701789E+00 + -0.5507271714777416E+00 + -0.5493106211813302E+00 + -0.5478938788332721E+00 + -0.5464769447796206E+00 + -0.5450598193567005E+00 + -0.5436425028999995E+00 + -0.5422249957495950E+00 + -0.5408072982639123E+00 + -0.5393894108059648E+00 + -0.5379713337365652E+00 + -0.5365530673909493E+00 + -0.5351346120878498E+00 + -0.5337159681459539E+00 + -0.5322971358977648E+00 + -0.5308781156971952E+00 + -0.5294589078999995E+00 + -0.5280395128579953E+00 + -0.5266199309072423E+00 + -0.5252001623798623E+00 + -0.5237802076076025E+00 + -0.5223600669178707E+00 + -0.5209397406352717E+00 + -0.5195192290844966E+00 + -0.5180985325981947E+00 + -0.5166776515213481E+00 + -0.5152565861999995E+00 + -0.5138353369752307E+00 + -0.5124139041682717E+00 + -0.5109922880953906E+00 + -0.5095704890736753E+00 + -0.5081485074297547E+00 + -0.5067263434964105E+00 + -0.5053039976065003E+00 + -0.5038814700912941E+00 + -0.5024587612795964E+00 + -0.5010358714999994E+00 + -0.4996128010784894E+00 + -0.4981895503306166E+00 + -0.4967661195693242E+00 + -0.4953425091084575E+00 + -0.4939187192723652E+00 + -0.4924947503921699E+00 + -0.4910706027989516E+00 + -0.4896462768144877E+00 + -0.4882217727461324E+00 + -0.4867970909000000E+00 + -0.4853722315851028E+00 + -0.4839471951220508E+00 + -0.4825219818343511E+00 + -0.4810965920449157E+00 + -0.4796710260697391E+00 + -0.4782452842203501E+00 + -0.4768193668081935E+00 + -0.4753932741441293E+00 + -0.4739670065381075E+00 + -0.4725405643000000E+00 + -0.4711139477400427E+00 + -0.4696871571699287E+00 + -0.4682601929017139E+00 + -0.4668330552471009E+00 + -0.4654057445136868E+00 + -0.4639782610064181E+00 + -0.4625506050301600E+00 + -0.4611227768875684E+00 + -0.4596947768778708E+00 + -0.4582666053000001E+00 + -0.4568382624553608E+00 + -0.4554097486552471E+00 + -0.4539810642134235E+00 + -0.4525522094426196E+00 + -0.4511231846435349E+00 + -0.4496939901091049E+00 + -0.4482646261321617E+00 + -0.4468350930070951E+00 + -0.4454053910307051E+00 + -0.4439755205000000E+00 + -0.4425454817126794E+00 + -0.4411152749692131E+00 + -0.4396849005707615E+00 + -0.4382543588182570E+00 + -0.4368236500099861E+00 + -0.4353927744425249E+00 + -0.4339617324123103E+00 + -0.4325305242090735E+00 + -0.4310991501121551E+00 + -0.4296676104000000E+00 + -0.4282359053557906E+00 + -0.4268040352816602E+00 + -0.4253720004844777E+00 + -0.4239398012695913E+00 + -0.4225074379246737E+00 + -0.4210749107259908E+00 + -0.4196422199497039E+00 + -0.4182093658770658E+00 + -0.4167763487972231E+00 + -0.4153431690000000E+00 + -0.4139098267738874E+00 + -0.4124763224020444E+00 + -0.4110426561662958E+00 + -0.4096088283485673E+00 + -0.4081748392319632E+00 + -0.4067406891003454E+00 + -0.4053063782375878E+00 + -0.4038719069274894E+00 + -0.4024372754537355E+00 + -0.4010024841000000E+00 + -0.3995675331470488E+00 + -0.3981324228640183E+00 + -0.3966971535171356E+00 + -0.3952617253736840E+00 + -0.3938261387132263E+00 + -0.3923903938232455E+00 + -0.3909544909912367E+00 + -0.3895184304974703E+00 + -0.3880822126110214E+00 + -0.3866458376000000E+00 + -0.3852093057338549E+00 + -0.3837726172873904E+00 + -0.3823357725367478E+00 + -0.3808987717574452E+00 + -0.3794616152177577E+00 + -0.3780243031812844E+00 + -0.3765868359116094E+00 + -0.3751492136760378E+00 + -0.3737114367476447E+00 + -0.3722735054000000E+00 + -0.3708354199047779E+00 + -0.3693971805260717E+00 + -0.3679587875260775E+00 + -0.3665202411671423E+00 + -0.3650815417133617E+00 + -0.3636426894299611E+00 + -0.3622036845821777E+00 + -0.3607645274349487E+00 + -0.3593252182527460E+00 + -0.3578857573000000E+00 + -0.3564461448411749E+00 + -0.3550063811408712E+00 + -0.3535664664637212E+00 + -0.3521264010735583E+00 + -0.3506861852249174E+00 + -0.3492458191663363E+00 + -0.3478053031463500E+00 + -0.3463646374194130E+00 + -0.3449238222491566E+00 + -0.3434828579000000E+00 + -0.3420417446338063E+00 + -0.3406004827022174E+00 + -0.3391590723543174E+00 + -0.3377175138398311E+00 + -0.3362758074159205E+00 + -0.3348339533445474E+00 + -0.3333919518876272E+00 + -0.3319498032995602E+00 + -0.3305075078231009E+00 + -0.3290650657000000E+00 + -0.3276224771752754E+00 + -0.3261797425070148E+00 + -0.3247368619565716E+00 + -0.3232938357840294E+00 + -0.3218506642347060E+00 + -0.3204073475443945E+00 + -0.3189638859488422E+00 + -0.3175202796906399E+00 + -0.3160765290229886E+00 + -0.3146326342000000E+00 + -0.3131885954731535E+00 + -0.3117444130833997E+00 + -0.3103000872690554E+00 + -0.3088556182690451E+00 + -0.3074110063293553E+00 + -0.3059662517005299E+00 + -0.3045213546330814E+00 + -0.3030763153711471E+00 + -0.3016311341489846E+00 + -0.3001858112000000E+00 + -0.2987403467589246E+00 + -0.2972947410657877E+00 + -0.2958489943619447E+00 + -0.2944031068888295E+00 + -0.2929570788888069E+00 + -0.2915109106048437E+00 + -0.2900646022798259E+00 + -0.2886181541512942E+00 + -0.2871715664485049E+00 + -0.2857248394000000E+00 + -0.2842779732355740E+00 + -0.2828309681900284E+00 + -0.2813838244994184E+00 + -0.2799365423998263E+00 + -0.2784891221276720E+00 + -0.2770415639195942E+00 + -0.2755938680121729E+00 + -0.2741460346383359E+00 + -0.2726980640253516E+00 + -0.2712499564000000E+00 + -0.2698017119901374E+00 + -0.2683533310279244E+00 + -0.2669048137465988E+00 + -0.2654561603786089E+00 + -0.2640073711472374E+00 + -0.2625584462698552E+00 + -0.2611093859638879E+00 + -0.2596601904560219E+00 + -0.2582108599873005E+00 + -0.2567613948000000E+00 + -0.2553117951304880E+00 + -0.2538620611914942E+00 + -0.2524121931898402E+00 + -0.2509621913341152E+00 + -0.2495120558534712E+00 + -0.2480617869903283E+00 + -0.2466113849870604E+00 + -0.2451608500701079E+00 + -0.2437101824412149E+00 + -0.2422593823000000E+00 + -0.2408084498525928E+00 + -0.2393573853311664E+00 + -0.2379061889744067E+00 + -0.2364548610194054E+00 + -0.2350034016847452E+00 + -0.2335518111770688E+00 + -0.2321000897028733E+00 + -0.2306482374719533E+00 + -0.2291962546992136E+00 + -0.2277441416000000E+00 + -0.2262918983917958E+00 + -0.2248395253006395E+00 + -0.2233870225547102E+00 + -0.2219343903808107E+00 + -0.2204816289897649E+00 + -0.2190287385820886E+00 + -0.2175757193582327E+00 + -0.2161225715251322E+00 + -0.2146692952997711E+00 + -0.2132158909000000E+00 + -0.2117623585420359E+00 + -0.2103086984355697E+00 + -0.2088549107886621E+00 + -0.2074009958096414E+00 + -0.2059469537099662E+00 + -0.2044927847031157E+00 + -0.2030384890025269E+00 + -0.2015840668171862E+00 + -0.2001295183491792E+00 + -0.1986748438000000E+00 + -0.1972200433728448E+00 + -0.1957651172777258E+00 + -0.1943100657263610E+00 + -0.1928548889298408E+00 + -0.1913995870919776E+00 + -0.1899441604118910E+00 + -0.1884886090886700E+00 + -0.1870329333243985E+00 + -0.1855771333258003E+00 + -0.1841212093000000E+00 + -0.1826651614535444E+00 + -0.1812089899906751E+00 + -0.1797526951150589E+00 + -0.1782962770298449E+00 + -0.1768397359321821E+00 + -0.1753830720153479E+00 + -0.1739262854726360E+00 + -0.1724693765021044E+00 + -0.1710123453091983E+00 + -0.1695551921000000E+00 + -0.1680979170791535E+00 + -0.1666405204455570E+00 + -0.1651830023966735E+00 + -0.1637253631294319E+00 + -0.1622676028345660E+00 + -0.1608097216988123E+00 + -0.1593517199089617E+00 + -0.1578935976589837E+00 + -0.1564353551539773E+00 + -0.1549769926000000E+00 + -0.1535185102000823E+00 + -0.1520599081451526E+00 + -0.1506011866231151E+00 + -0.1491423458221009E+00 + -0.1476833859328983E+00 + -0.1462243071480085E+00 + -0.1447651096599611E+00 + -0.1433057936611519E+00 + -0.1418463593437729E+00 + -0.1403868069000000E+00 + -0.1389271365214733E+00 + -0.1374673483976967E+00 + -0.1360074427176413E+00 + -0.1345474196701273E+00 + -0.1330872794422386E+00 + -0.1316270222199378E+00 + -0.1301666481891648E+00 + -0.1287061575355276E+00 + -0.1272455504441216E+00 + -0.1257848271000000E+00 + -0.1243239876893135E+00 + -0.1228630324026097E+00 + -0.1214019614315374E+00 + -0.1199407749672848E+00 + -0.1184794731957076E+00 + -0.1170180562992204E+00 + -0.1155565244601712E+00 + -0.1140948778602248E+00 + -0.1126331166799935E+00 + -0.1111712411000000E+00 + -0.1097092513008378E+00 + -0.1082471474633900E+00 + -0.1067849297686118E+00 + -0.1053225983974648E+00 + -0.1038601535309665E+00 + -0.1023975953501721E+00 + -0.1009349240361333E+00 + -0.9947213976959105E-01 + -0.9800924273080620E-01 + -0.9654623310000000E-01 + -0.9508311105685259E-01 + -0.9361987677888674E-01 + -0.9215653044308514E-01 + -0.9069307222639283E-01 + -0.8922950230529596E-01 + -0.8776582085598562E-01 + -0.8630202805464938E-01 + -0.8483812407745191E-01 + -0.8337410910052519E-01 + -0.8190998329999999E-01 + -0.8044574685136627E-01 + -0.7898139992755770E-01 + -0.7751694270086819E-01 + -0.7605237534371378E-01 + -0.7458769802990827E-01 + -0.7312291093416845E-01 + -0.7165801423120128E-01 + -0.7019300809412082E-01 + -0.6872789269357469E-01 + -0.6726266819999998E-01 + -0.6579733478386012E-01 + -0.6433189261573073E-01 + -0.6286634186621491E-01 + -0.6140068270585640E-01 + -0.5993491530448889E-01 + -0.5846903983148904E-01 + -0.5700305645621693E-01 + -0.5553696534739715E-01 + -0.5407076667277178E-01 + -0.5260446060000001E-01 + -0.5113804729673603E-01 + -0.4967152693062125E-01 + -0.4820489966929312E-01 + -0.4673816568023926E-01 + -0.4527132512918422E-01 + -0.4380437818071620E-01 + -0.4233732499941195E-01 + -0.4087016575019955E-01 + -0.3940290059855481E-01 + -0.3793552971000000E-01 + -0.3646805324966506E-01 + -0.3500047138110230E-01 + -0.3353278426747004E-01 + -0.3206499207186812E-01 + -0.3059709495669602E-01 + -0.2912909308390244E-01 + -0.2766098661542483E-01 + -0.2619277571287774E-01 + -0.2472446053737823E-01 + -0.2325604125000000E-01 + -0.2178751801178955E-01 + -0.2031889098367649E-01 + -0.1885016032656162E-01 + -0.1738132620118435E-01 + -0.1591238876638748E-01 + -0.1444334817979128E-01 + -0.1297420459900483E-01 + -0.1150495818208986E-01 + -0.1003560908781277E-01 + -0.8566157474999459E-02 + -0.7096603502049525E-02 + -0.5626947325641096E-02 + -0.4157189102023285E-02 + -0.2687328987423366E-02 + -0.1217367137794146E-02 + 0.2526962910875991E-03 + 0.1722861143454749E-02 + 0.3193127264043149E-02 + 0.4663494498365161E-02 + 0.6133962692000543E-02 + 0.7604531690652805E-02 + 0.9075201340528649E-02 + 0.1054597148796017E-01 + 0.1201684197935037E-01 + 0.1348781266194723E-01 + 0.1495888338354228E-01 + 0.1643005399194075E-01 + 0.1790132433519121E-01 + 0.1937269426172361E-01 + 0.2084416362000054E-01 + 0.2231573225866118E-01 + 0.2378740002705903E-01 + 0.2525916677472579E-01 + 0.2673103235126769E-01 + 0.2820299660717789E-01 + 0.2967505939352020E-01 + 0.3114722056137382E-01 + 0.3261947996213566E-01 + 0.3409183744769920E-01 + 0.3556429287000055E-01 + 0.3703684608095231E-01 + 0.3850949693238137E-01 + 0.3998224527609278E-01 + 0.4145509096403327E-01 + 0.4292803384981711E-01 + 0.4440107378813282E-01 + 0.4587421063368657E-01 + 0.4734744424113221E-01 + 0.4882077446504678E-01 + 0.5029420116000056E-01 + 0.5176772418070968E-01 + 0.5324134338248179E-01 + 0.5471505862077209E-01 + 0.5618886975110603E-01 + 0.5766277662984729E-01 + 0.5913677911389870E-01 + 0.6061087706018119E-01 + 0.6208507032612747E-01 + 0.6355935876996771E-01 + 0.6503374225000053E-01 + 0.6650822062443591E-01 + 0.6798279375113726E-01 + 0.6945746148788102E-01 + 0.7093222369255664E-01 + 0.7240708022438858E-01 + 0.7388203094346093E-01 + 0.7535707570987858E-01 + 0.7683221438409729E-01 + 0.7830744682712099E-01 + 0.7978277290000055E-01 + 0.8125819246384358E-01 + 0.8273370537999238E-01 + 0.8420931150984711E-01 + 0.8568501071485224E-01 + 0.8716080285696119E-01 + 0.8863668779845828E-01 + 0.9011266540163920E-01 + 0.9158873552915116E-01 + 0.9306489804419050E-01 + 0.9454115281000053E-01 + 0.9601749969038915E-01 + 0.9749393855143017E-01 + 0.9897046925976305E-01 + 0.1004470916817098E+00 + 0.1019238056798935E+00 + 0.1034006111145542E+00 + 0.1048775078459697E+00 + 0.1063544957390992E+00 + 0.1078315746661617E+00 + 0.1093087445000005E+00 + 0.1107860051117718E+00 + 0.1122633563658910E+00 + 0.1137407981250875E+00 + 0.1152183302522647E+00 + 0.1166959526123393E+00 + 0.1181736650715298E+00 + 0.1196514674961521E+00 + 0.1211293597570660E+00 + 0.1226073417321780E+00 + 0.1240854133000005E+00 + 0.1255635743356781E+00 + 0.1270418247008900E+00 + 0.1285201642539483E+00 + 0.1299985928541501E+00 + 0.1314771103722298E+00 + 0.1329557166863043E+00 + 0.1344344116745459E+00 + 0.1359131952110854E+00 + 0.1373920671637931E+00 + 0.1388710274000006E+00 + 0.1403500757882887E+00 + 0.1418292122022437E+00 + 0.1433084365167019E+00 + 0.1447877486063566E+00 + 0.1462671483442266E+00 + 0.1477466356022537E+00 + 0.1492262102523871E+00 + 0.1507058721681107E+00 + 0.1521856212252913E+00 + 0.1536654573000000E+00 + 0.1551453802687286E+00 + 0.1566253900096485E+00 + 0.1581054864013527E+00 + 0.1595856693217317E+00 + 0.1610659386405024E+00 + 0.1625462942221116E+00 + 0.1640267359310541E+00 + 0.1655072636399769E+00 + 0.1669878772341675E+00 + 0.1684685766000000E+00 + 0.1699493616223443E+00 + 0.1714302321800493E+00 + 0.1729111881504609E+00 + 0.1743922294108212E+00 + 0.1758733558371648E+00 + 0.1773545673047499E+00 + 0.1788358636888295E+00 + 0.1803172448651106E+00 + 0.1817987107100088E+00 + 0.1832802611000000E+00 + 0.1847618959137898E+00 + 0.1862436150389999E+00 + 0.1877254183654829E+00 + 0.1892073057819879E+00 + 0.1906892771644414E+00 + 0.1921713323804981E+00 + 0.1936534712978397E+00 + 0.1951356937942906E+00 + 0.1966179997633823E+00 + 0.1981003891000000E+00 + 0.1995828616953028E+00 + 0.2010654174255639E+00 + 0.2025480561633291E+00 + 0.2040307777818073E+00 + 0.2055135821618871E+00 + 0.2069964691894079E+00 + 0.2084794387503011E+00 + 0.2099624907309535E+00 + 0.2114456250184673E+00 + 0.2129288415000000E+00 + 0.2144121400623612E+00 + 0.2158955205909376E+00 + 0.2173789829707620E+00 + 0.2188625270864279E+00 + 0.2203461528174012E+00 + 0.2218298600398468E+00 + 0.2233136486300022E+00 + 0.2247975184721227E+00 + 0.2262814694628759E+00 + 0.2277655015000000E+00 + 0.2292496144790977E+00 + 0.2307338082872472E+00 + 0.2322180828093946E+00 + 0.2337024379303405E+00 + 0.2351868735332483E+00 + 0.2366713895002170E+00 + 0.2381559857133795E+00 + 0.2396406620578449E+00 + 0.2411254184233441E+00 + 0.2426102547000000E+00 + 0.2440951707784564E+00 + 0.2455801665514107E+00 + 0.2470652419120761E+00 + 0.2485503967534597E+00 + 0.2500356309661595E+00 + 0.2515209444392256E+00 + 0.2530063370616610E+00 + 0.2544918087215409E+00 + 0.2559773593054874E+00 + 0.2574629887000000E+00 + 0.2589486967939560E+00 + 0.2604344834857598E+00 + 0.2619203486761970E+00 + 0.2634062922649511E+00 + 0.2648923141389564E+00 + 0.2663784141769127E+00 + 0.2678645922575453E+00 + 0.2693508482692050E+00 + 0.2708371821151708E+00 + 0.2723235937000000E+00 + 0.2738100829254288E+00 + 0.2752966496818769E+00 + 0.2767832938569375E+00 + 0.2782700153386728E+00 + 0.2797568140205802E+00 + 0.2812436897996710E+00 + 0.2827306425729800E+00 + 0.2842176722357967E+00 + 0.2857047786806906E+00 + 0.2871919618000000E+00 + 0.2886792214876341E+00 + 0.2901665576438044E+00 + 0.2916539701702970E+00 + 0.2931414589680605E+00 + 0.2946290239283708E+00 + 0.2961166649362537E+00 + 0.2976043818767913E+00 + 0.2990921746445442E+00 + 0.3005800431487726E+00 + 0.3020679873000000E+00 + 0.3035560070052931E+00 + 0.3050441021578915E+00 + 0.3065322726475781E+00 + 0.3080205183645696E+00 + 0.3095088392041098E+00 + 0.3109972350646920E+00 + 0.3124857058448711E+00 + 0.3139742514439051E+00 + 0.3154628717621362E+00 + 0.3169515667000000E+00 + 0.3184403361579116E+00 + 0.3199291800362043E+00 + 0.3214180982351922E+00 + 0.3229070906551170E+00 + 0.3243961571954195E+00 + 0.3258852977550203E+00 + 0.3273745122328670E+00 + 0.3288638005300280E+00 + 0.3303531625508594E+00 + 0.3318425982000011E+00 + 0.3333321073812053E+00 + 0.3348216899946897E+00 + 0.3363113459397866E+00 + 0.3378010751157934E+00 + 0.3392908774216064E+00 + 0.3407807527558628E+00 + 0.3422707010172466E+00 + 0.3437607221074396E+00 + 0.3452508159327787E+00 + 0.3467409824000000E+00 + 0.3482312214159540E+00 + 0.3497215328879497E+00 + 0.3512119167234116E+00 + 0.3527023728292252E+00 + 0.3541929011060481E+00 + 0.3556835014505167E+00 + 0.3571741737592644E+00 + 0.3586649179327500E+00 + 0.3601557338773622E+00 + 0.3616466215000011E+00 + 0.3631375807078858E+00 + 0.3646286114095298E+00 + 0.3661197135137678E+00 + 0.3676108869293423E+00 + 0.3691021315639205E+00 + 0.3705934473244760E+00 + 0.3720848341179060E+00 + 0.3735762918471620E+00 + 0.3750678204090876E+00 + 0.3765594197000000E+00 + 0.3780510896209250E+00 + 0.3795428300917240E+00 + 0.3810346410369692E+00 + 0.3825265223793734E+00 + 0.3840184740200849E+00 + 0.3855104958463356E+00 + 0.3870025877453791E+00 + 0.3884947496196645E+00 + 0.3899869813951950E+00 + 0.3914792830000011E+00 + 0.3929716543572186E+00 + 0.3944640953704223E+00 + 0.3959566059382946E+00 + 0.3974491859600886E+00 + 0.3989418353416934E+00 + 0.4004345539932789E+00 + 0.4019273418250834E+00 + 0.4034201987470864E+00 + 0.4049131246688746E+00 + 0.4064061195000000E+00 + 0.4078991831512476E+00 + 0.4093923155383362E+00 + 0.4108855165782174E+00 + 0.4123787861872168E+00 + 0.4138721242743586E+00 + 0.4153655307439626E+00 + 0.4168590055003373E+00 + 0.4183525484518824E+00 + 0.4198461595133406E+00 + 0.4213398386000011E+00 + 0.4228335856273030E+00 + 0.4243274005113014E+00 + 0.4258212831682035E+00 + 0.4273152335134893E+00 + 0.4288092514541864E+00 + 0.4303033368918694E+00 + 0.4317974897281806E+00 + 0.4332917098742314E+00 + 0.4347859972558183E+00 + 0.4362803518000000E+00 + 0.4377747734300389E+00 + 0.4392692620540139E+00 + 0.4407638175762080E+00 + 0.4422584399017414E+00 + 0.4437531289454474E+00 + 0.4452478846284317E+00 + 0.4467427068718259E+00 + 0.4482375955921217E+00 + 0.4497325506986194E+00 + 0.4512275721000011E+00 + 0.4527226597077767E+00 + 0.4542178134447821E+00 + 0.4557130332366823E+00 + 0.4572083190080067E+00 + 0.4587036706700763E+00 + 0.4601990881256909E+00 + 0.4616945712776729E+00 + 0.4631901200386354E+00 + 0.4646857343363768E+00 + 0.4661814141000001E+00 + 0.4676771592556127E+00 + 0.4691729697173407E+00 + 0.4706688453963144E+00 + 0.4721647862043095E+00 + 0.4736607920605868E+00 + 0.4751568628892422E+00 + 0.4766529986143391E+00 + 0.4781491991532731E+00 + 0.4796454644131034E+00 + 0.4811417943000000E+00 + 0.4826381887245631E+00 + 0.4841346476151060E+00 + 0.4856311709043740E+00 + 0.4871277585239515E+00 + 0.4886244103919367E+00 + 0.4901211264177276E+00 + 0.4916179065106938E+00 + 0.4931147505871619E+00 + 0.4946116585742492E+00 + 0.4961086304000000E+00 + 0.4976056659892463E+00 + 0.4991027652539709E+00 + 0.5005999281029441E+00 + 0.5020971544462164E+00 + 0.5035944442087058E+00 + 0.5050917973249273E+00 + 0.5065892137294346E+00 + 0.5080866933495438E+00 + 0.5095842361013542E+00 + 0.5110818418999999E+00 + 0.5125795106612255E+00 + 0.5140772423032084E+00 + 0.5155750367447384E+00 + 0.5170728939048472E+00 + 0.5185708137053927E+00 + 0.5200687960700554E+00 + 0.5215668409226036E+00 + 0.5230649481901560E+00 + 0.5245631178050326E+00 + 0.5260613497000000E+00 + 0.5275596438036673E+00 + 0.5290580000280154E+00 + 0.5305564182808684E+00 + 0.5320548984713311E+00 + 0.5335534405233810E+00 + 0.5350520443705969E+00 + 0.5365507099466305E+00 + 0.5380494371799813E+00 + 0.5395482259911624E+00 + 0.5410470763000000E+00 + 0.5425459880285768E+00 + 0.5440449611079922E+00 + 0.5455439954716042E+00 + 0.5470430910515839E+00 + 0.5485422477663189E+00 + 0.5500414655253043E+00 + 0.5515407442380962E+00 + 0.5530400838268105E+00 + 0.5545394842330262E+00 + 0.5560389454000000E+00 + 0.5575384672658833E+00 + 0.5590380497484116E+00 + 0.5605376927602157E+00 + 0.5620373962151031E+00 + 0.5635371600405334E+00 + 0.5650369841727799E+00 + 0.5665368685481639E+00 + 0.5680368130971070E+00 + 0.5695368177408883E+00 + 0.5710368824000000E+00 + 0.5725370069961887E+00 + 0.5740371914562102E+00 + 0.5755374357080770E+00 + 0.5770377396799012E+00 + 0.5785381033009738E+00 + 0.5800385265013452E+00 + 0.5815390092110818E+00 + 0.5830395513604255E+00 + 0.5845401528798861E+00 + 0.5860408137000000E+00 + 0.5875415337506458E+00 + 0.5890423129590761E+00 + 0.5905431512518874E+00 + 0.5920440485556316E+00 + 0.5935450047963315E+00 + 0.5950460198996730E+00 + 0.5965470937913827E+00 + 0.5980482264000044E+00 + 0.5995494176584481E+00 + 0.6010506675000000E+00 + 0.6025519758584288E+00 + 0.6040533426694270E+00 + 0.6055547678691723E+00 + 0.6070562513928946E+00 + 0.6085577931648201E+00 + 0.6100593931020750E+00 + 0.6115610511218232E+00 + 0.6130627671505561E+00 + 0.6145645411292179E+00 + 0.6160663730000000E+00 + 0.6175682627022994E+00 + 0.6190702101643408E+00 + 0.6205722153115558E+00 + 0.6220742780698427E+00 + 0.6235763983705269E+00 + 0.6250785761484310E+00 + 0.6265808113384094E+00 + 0.6280831038735199E+00 + 0.6295854536840382E+00 + 0.6310878607000000E+00 + 0.6325903248530985E+00 + 0.6340928460816482E+00 + 0.6355954243256226E+00 + 0.6370980595240710E+00 + 0.6386007516053082E+00 + 0.6401035004907236E+00 + 0.6416063061016911E+00 + 0.6431091683656074E+00 + 0.6446120872191994E+00 + 0.6461150625999999E+00 + 0.6476180944459186E+00 + 0.6491211826963770E+00 + 0.6506243272911748E+00 + 0.6521275281696606E+00 + 0.6536307852659428E+00 + 0.6551340985107457E+00 + 0.6566374678347509E+00 + 0.6581408931693260E+00 + 0.6596443744469016E+00 + 0.6611479116000000E+00 + 0.6626515045614308E+00 + 0.6641551532651466E+00 + 0.6656588576453897E+00 + 0.6671626176367703E+00 + 0.6686664331781881E+00 + 0.6701703042113105E+00 + 0.6716742306777559E+00 + 0.6731782125134367E+00 + 0.6746822496454162E+00 + 0.6761863420000001E+00 + 0.6776904895071203E+00 + 0.6791946921112181E+00 + 0.6806989497603620E+00 + 0.6822032624014827E+00 + 0.6837076299682802E+00 + 0.6852120523859153E+00 + 0.6867165295795447E+00 + 0.6882210614824082E+00 + 0.6897256480402771E+00 + 0.6912302892000000E+00 + 0.6927349849058151E+00 + 0.6942397350915178E+00 + 0.6957445396882886E+00 + 0.6972493986277285E+00 + 0.6987543118462800E+00 + 0.7002592792835101E+00 + 0.7017643008790256E+00 + 0.7032693765717398E+00 + 0.7047745062994839E+00 + 0.7062796900000000E+00 + 0.7077849276108752E+00 + 0.7092902190690811E+00 + 0.7107955643114358E+00 + 0.7123009632750321E+00 + 0.7138064159001613E+00 + 0.7153119221291736E+00 + 0.7168174819044255E+00 + 0.7183230951663637E+00 + 0.7198287618524772E+00 + 0.7213344819000001E+00 + 0.7228402552459738E+00 + 0.7243460818266675E+00 + 0.7258519615781544E+00 + 0.7273578944369941E+00 + 0.7288638803453655E+00 + 0.7303699192490738E+00 + 0.7318760110939497E+00 + 0.7333821558237505E+00 + 0.7348883533790126E+00 + 0.7363946037000000E+00 + 0.7379009067263789E+00 + 0.7394072623954302E+00 + 0.7409136706438390E+00 + 0.7424201314084732E+00 + 0.7439266446283337E+00 + 0.7454332102437933E+00 + 0.7469398281952813E+00 + 0.7484464984250505E+00 + 0.7499532208781821E+00 + 0.7514599955000000E+00 + 0.7529668222346254E+00 + 0.7544737010213675E+00 + 0.7559806317983285E+00 + 0.7574876145039976E+00 + 0.7589946490813123E+00 + 0.7605017354760824E+00 + 0.7620088736341176E+00 + 0.7635160634984173E+00 + 0.7650233050076234E+00 + 0.7665305981000000E+00 + 0.7680379427148832E+00 + 0.7695453387958827E+00 + 0.7710527862876761E+00 + 0.7725602851348504E+00 + 0.7740678352809267E+00 + 0.7755754366687349E+00 + 0.7770830892411035E+00 + 0.7785907929412362E+00 + 0.7800985477129220E+00 + 0.7816063535000000E+00 + 0.7831142102459394E+00 + 0.7846221178927340E+00 + 0.7861300763820047E+00 + 0.7876380856557629E+00 + 0.7891461456605237E+00 + 0.7906542563457073E+00 + 0.7921624176607028E+00 + 0.7936706295500962E+00 + 0.7951788919510291E+00 + 0.7966872048000000E+00 + 0.7981955680354486E+00 + 0.7997039816035663E+00 + 0.8012124454524823E+00 + 0.8027209595302699E+00 + 0.8042295237843423E+00 + 0.8057381381616890E+00 + 0.8072468026092455E+00 + 0.8087555170713452E+00 + 0.8102642814882813E+00 + 0.8117730957999999E+00 + 0.8132819599486286E+00 + 0.8147908738850214E+00 + 0.8162998375622113E+00 + 0.8178088509325946E+00 + 0.8193179139411534E+00 + 0.8208270265280813E+00 + 0.8223361886335328E+00 + 0.8238454001999514E+00 + 0.8253546611733398E+00 + 0.8268639715000001E+00 + 0.8283733311269675E+00 + 0.8298827400041764E+00 + 0.8313921980822885E+00 + 0.8329017053116004E+00 + 0.8344112616381494E+00 + 0.8359208670052322E+00 + 0.8374305213561492E+00 + 0.8389402246375777E+00 + 0.8404499768014125E+00 + 0.8419597778000000E+00 + 0.8434696275835540E+00 + 0.8449795260937771E+00 + 0.8464894732702385E+00 + 0.8479994690529832E+00 + 0.8495095133875688E+00 + 0.8510196062231044E+00 + 0.8525297475088022E+00 + 0.8540399371963833E+00 + 0.8555501752414664E+00 + 0.8570604616000001E+00 + 0.8585707962245179E+00 + 0.8600811790538636E+00 + 0.8615916100234609E+00 + 0.8631020890700544E+00 + 0.8646126161457309E+00 + 0.8661231912124825E+00 + 0.8676338142323266E+00 + 0.8691444851592893E+00 + 0.8706552039349941E+00 + 0.8721659705000000E+00 + 0.8736767847967057E+00 + 0.8751876467748831E+00 + 0.8766985563861466E+00 + 0.8782095135817890E+00 + 0.8797205183094214E+00 + 0.8812315705142698E+00 + 0.8827426701416139E+00 + 0.8842538171421547E+00 + 0.8857650114750062E+00 + 0.8872762530999999E+00 + 0.8887875419736805E+00 + 0.8902988780394123E+00 + 0.8918102612372669E+00 + 0.8933216915080976E+00 + 0.8948331688018289E+00 + 0.8963446930742444E+00 + 0.8978562642811514E+00 + 0.8993678823742654E+00 + 0.9008795472989435E+00 + 0.9023912590000000E+00 + 0.9039030174242877E+00 + 0.9054148225268367E+00 + 0.9069266742647196E+00 + 0.9084385725947300E+00 + 0.9099505174704689E+00 + 0.9114625088434700E+00 + 0.9129745466651960E+00 + 0.9144866308848210E+00 + 0.9159987614479805E+00 + 0.9175109382999999E+00 + 0.9190231613885537E+00 + 0.9205354306706836E+00 + 0.9220477461057747E+00 + 0.9235601076523418E+00 + 0.9250725152587606E+00 + 0.9265849688668729E+00 + 0.9280974684185550E+00 + 0.9296100138646384E+00 + 0.9311226051698220E+00 + 0.9326352422999999E+00 + 0.9341479252159971E+00 + 0.9356606538583783E+00 + 0.9371734281626431E+00 + 0.9386862480658971E+00 + 0.9401991135239763E+00 + 0.9417120245047920E+00 + 0.9432249809763414E+00 + 0.9447379828995569E+00 + 0.9462510302244274E+00 + 0.9477641229000000E+00 + 0.9492772608744970E+00 + 0.9507904440928414E+00 + 0.9523036724991316E+00 + 0.9538169460385868E+00 + 0.9553302646694311E+00 + 0.9568436283582859E+00 + 0.9583570370717800E+00 + 0.9598704907688052E+00 + 0.9613839893962572E+00 + 0.9628975328999999E+00 + 0.9644111212279505E+00 + 0.9659247543362415E+00 + 0.9674384321830607E+00 + 0.9689521547259894E+00 + 0.9704659219156117E+00 + 0.9719797336979941E+00 + 0.9734935900192523E+00 + 0.9750074908330060E+00 + 0.9765214361045052E+00 + 0.9780354258000013E+00 + 0.9795494598823687E+00 + 0.9810635383009892E+00 + 0.9825776610018696E+00 + 0.9840918279316156E+00 + 0.9856060390437870E+00 + 0.9871202942964329E+00 + 0.9886345936476994E+00 + 0.9901489370572843E+00 + 0.9916633244872838E+00 + 0.9931777559000000E+00 + 0.9946922312502302E+00 + 0.9962067504627473E+00 + 0.9977213134548201E+00 + 0.9992359201492031E+00 + 0.1000750570532468E+01 + 0.1002265264632356E+01 + 0.1003780002476529E+01 + 0.1005294784046645E+01 + 0.1006809609253061E+01 + 0.1008324478000001E+01 + 0.1009839390199262E+01 + 0.1011354345792950E+01 + 0.1012869344730743E+01 + 0.1014384386963476E+01 + 0.1015899472455404E+01 + 0.1017414601179441E+01 + 0.1018929773108789E+01 + 0.1020444988225174E+01 + 0.1021960246523549E+01 + 0.1023475548000000E+01 + 0.1024990892631366E+01 + 0.1026506280317489E+01 + 0.1028021710938961E+01 + 0.1029537184382049E+01 + 0.1031052700599013E+01 + 0.1032568259584689E+01 + 0.1034083861334493E+01 + 0.1035599505836323E+01 + 0.1037115193066414E+01 + 0.1038630923000001E+01 + 0.1040146695606696E+01 + 0.1041662510833642E+01 + 0.1043178368622362E+01 + 0.1044694268914040E+01 + 0.1046210211645930E+01 + 0.1047726196752751E+01 + 0.1049242224169555E+01 + 0.1050758293854024E+01 + 0.1052274405798914E+01 + 0.1053790560000000E+01 + 0.1055306756440465E+01 + 0.1056822995053128E+01 + 0.1058339275758219E+01 + 0.1059855598479871E+01 + 0.1061371963187616E+01 + 0.1062888369880278E+01 + 0.1064404818556682E+01 + 0.1065921309186474E+01 + 0.1067437841694070E+01 + 0.1068954416000001E+01 + 0.1070471032037133E+01 + 0.1071987689787704E+01 + 0.1073504389246292E+01 + 0.1075021130404741E+01 + 0.1076537913223075E+01 + 0.1078054737640795E+01 + 0.1079571603596972E+01 + 0.1081088511025351E+01 + 0.1082605459851431E+01 + 0.1084122450000000E+01 + 0.1085639481414664E+01 + 0.1087156554114294E+01 + 0.1088673668136579E+01 + 0.1090190823513616E+01 + 0.1091708020212498E+01 + 0.1093225258158381E+01 + 0.1094742537275824E+01 + 0.1096259857495315E+01 + 0.1097777218756547E+01 + 0.1099294621000001E+01 + 0.1100812064174347E+01 + 0.1102329548261011E+01 + 0.1103847073249610E+01 + 0.1105364639127261E+01 + 0.1106882245852060E+01 + 0.1108399893363376E+01 + 0.1109917581600211E+01 + 0.1111435310498270E+01 + 0.1112953079988148E+01 + 0.1114470890000000E+01 + 0.1115988740478342E+01 + 0.1117506631425137E+01 + 0.1119024562856706E+01 + 0.1120542534788793E+01 + 0.1122060547230380E+01 + 0.1123578600186094E+01 + 0.1125096693659246E+01 + 0.1126614827578671E+01 + 0.1128133001757767E+01 + 0.1129651216000001E+01 + 0.1131169470163858E+01 + 0.1132687764327897E+01 + 0.1134206098625698E+01 + 0.1135724473175563E+01 + 0.1137242887918197E+01 + 0.1138761342679729E+01 + 0.1140279837285981E+01 + 0.1141798371658817E+01 + 0.1143316945868975E+01 + 0.1144835560000000E+01 + 0.1146354214095113E+01 + 0.1147872908036242E+01 + 0.1149391641664990E+01 + 0.1150910414833948E+01 + 0.1152429227523396E+01 + 0.1153948079795999E+01 + 0.1155466971714797E+01 + 0.1156985903282905E+01 + 0.1158504874410558E+01 + 0.1160023885000000E+01 + 0.1161542934970267E+01 + 0.1163062024307550E+01 + 0.1164581153014834E+01 + 0.1166100321091193E+01 + 0.1167619528490257E+01 + 0.1169138775136336E+01 + 0.1170658060953585E+01 + 0.1172177385886124E+01 + 0.1173696749909019E+01 + 0.1175216153000000E+01 + 0.1176735595141052E+01 + 0.1178255076331181E+01 + 0.1179774596573649E+01 + 0.1181294155864014E+01 + 0.1182813754108252E+01 + 0.1184333391154548E+01 + 0.1185853066851822E+01 + 0.1187372781150703E+01 + 0.1188892534159480E+01 + 0.1190412326000000E+01 + 0.1191932156745036E+01 + 0.1193452026271046E+01 + 0.1194971934405412E+01 + 0.1196491880988121E+01 + 0.1198011866005687E+01 + 0.1199531889539158E+01 + 0.1201051951669676E+01 + 0.1202572052389302E+01 + 0.1204092191552036E+01 + 0.1205612369000000E+01 + 0.1207132584612110E+01 + 0.1208652838414460E+01 + 0.1210173130469941E+01 + 0.1211693460833710E+01 + 0.1213213829471042E+01 + 0.1214734236289224E+01 + 0.1216254681195079E+01 + 0.1217775164125620E+01 + 0.1219295685064651E+01 + 0.1220816244000000E+01 + 0.1222336840918253E+01 + 0.1223857475801016E+01 + 0.1225378148628654E+01 + 0.1226898859378979E+01 + 0.1228419608000157E+01 + 0.1229940394421222E+01 + 0.1231461218571211E+01 + 0.1232982080398443E+01 + 0.1234502979881115E+01 + 0.1236023917000000E+01 + 0.1237544891736773E+01 + 0.1239065904076731E+01 + 0.1240586954006074E+01 + 0.1242108041507361E+01 + 0.1243629166520795E+01 + 0.1245150328959257E+01 + 0.1246671528735960E+01 + 0.1248192765811403E+01 + 0.1249714040219383E+01 + 0.1251235352000000E+01 + 0.1252756701174533E+01 + 0.1254278087688976E+01 + 0.1255799511470504E+01 + 0.1257320972446291E+01 + 0.1258842470543532E+01 + 0.1260364005689430E+01 + 0.1261885577811885E+01 + 0.1263407186880579E+01 + 0.1264928832929947E+01 + 0.1266450516000000E+01 + 0.1267972236109538E+01 + 0.1269493993192530E+01 + 0.1271015787161738E+01 + 0.1272537617933490E+01 + 0.1274059485465549E+01 + 0.1275581389742413E+01 + 0.1277103330749028E+01 + 0.1278625308470534E+01 + 0.1280147322892370E+01 + 0.1281669374000000E+01 + 0.1283191461766513E+01 + 0.1284713586115482E+01 + 0.1286235746958106E+01 + 0.1287757944212228E+01 + 0.1289280177872929E+01 + 0.1290802447985121E+01 + 0.1292324754593684E+01 + 0.1293847097691679E+01 + 0.1295369477191841E+01 + 0.1296891893000000E+01 + 0.1298414345038838E+01 + 0.1299936833298444E+01 + 0.1301459357785760E+01 + 0.1302981918502663E+01 + 0.1304504515392168E+01 + 0.1306027148359312E+01 + 0.1307549817309407E+01 + 0.1309072522202224E+01 + 0.1310595263081941E+01 + 0.1312118040000000E+01 + 0.1313640852980907E+01 + 0.1315163701941428E+01 + 0.1316686586771397E+01 + 0.1318209507369308E+01 + 0.1319732463734345E+01 + 0.1321255455930654E+01 + 0.1322778484022129E+01 + 0.1324301547992677E+01 + 0.1325824647702214E+01 + 0.1327347783000000E+01 + 0.1328870953769038E+01 + 0.1330394160027329E+01 + 0.1331917401826623E+01 + 0.1333440679213338E+01 + 0.1334963992171886E+01 + 0.1336487340646675E+01 + 0.1338010724581868E+01 + 0.1339534143946636E+01 + 0.1341057598748921E+01 + 0.1342581089000000E+01 + 0.1344104614684128E+01 + 0.1345628175677477E+01 + 0.1347151771829195E+01 + 0.1348675403001124E+01 + 0.1350199069202626E+01 + 0.1351722770538236E+01 + 0.1353246507112736E+01 + 0.1354770278950251E+01 + 0.1356294085949886E+01 + 0.1357817928000000E+01 + 0.1359341805010297E+01 + 0.1360865716975883E+01 + 0.1362389663913213E+01 + 0.1363913645832195E+01 + 0.1365437662666592E+01 + 0.1366961714301042E+01 + 0.1368485800620852E+01 + 0.1370009921600377E+01 + 0.1371534077352006E+01 + 0.1373058268000000E+01 + 0.1374582493611432E+01 + 0.1376106754024625E+01 + 0.1377631049020712E+01 + 0.1379155378396733E+01 + 0.1380679742134617E+01 + 0.1382204140335577E+01 + 0.1383728573101979E+01 + 0.1385253040486140E+01 + 0.1386777542462793E+01 + 0.1388302079000000E+01 + 0.1389826650048238E+01 + 0.1391351255487645E+01 + 0.1392875895180775E+01 + 0.1394400569001695E+01 + 0.1395925276958332E+01 + 0.1397450019144969E+01 + 0.1398974795656227E+01 + 0.1400499606520362E+01 + 0.1402024451662770E+01 + 0.1403549331000000E+01 + 0.1405074244448189E+01 + 0.1406599191921830E+01 + 0.1408124173335006E+01 + 0.1409649188611134E+01 + 0.1411174237782156E+01 + 0.1412699320950025E+01 + 0.1414224438216212E+01 + 0.1415749589583039E+01 + 0.1417274774899159E+01 + 0.1418799994000000E+01 + 0.1420325246759948E+01 + 0.1421850533209204E+01 + 0.1423375853416926E+01 + 0.1424901207443319E+01 + 0.1426426595244565E+01 + 0.1427952016709723E+01 + 0.1429477471727771E+01 + 0.1431002960249583E+01 + 0.1432528482321970E+01 + 0.1434054038000000E+01 + 0.1435579627311526E+01 + 0.1437105250175552E+01 + 0.1438630906483867E+01 + 0.1440156596136262E+01 + 0.1441682319125515E+01 + 0.1443208075504398E+01 + 0.1444733865325688E+01 + 0.1446259688582668E+01 + 0.1447785545176398E+01 + 0.1449311435000000E+01 + 0.1450837357972704E+01 + 0.1452363314118133E+01 + 0.1453889303486012E+01 + 0.1455415326119065E+01 + 0.1456941381978644E+01 + 0.1458467470973599E+01 + 0.1459993593012440E+01 + 0.1461519748035675E+01 + 0.1463045936033406E+01 + 0.1464572157000000E+01 + 0.1466098410922854E+01 + 0.1467624697761492E+01 + 0.1469151017468468E+01 + 0.1470677370000328E+01 + 0.1472203755360042E+01 + 0.1473730173580525E+01 + 0.1475256624694457E+01 + 0.1476783108690203E+01 + 0.1478309625487458E+01 + 0.1479836175000000E+01 + 0.1481362757153895E+01 + 0.1482889371924315E+01 + 0.1484416019298709E+01 + 0.1485942699263886E+01 + 0.1487469411799166E+01 + 0.1488996156879048E+01 + 0.1490522934477810E+01 + 0.1492049744561765E+01 + 0.1493576587084865E+01 + 0.1495103462000000E+01 + 0.1496630369276581E+01 + 0.1498157308950114E+01 + 0.1499684281072622E+01 + 0.1501211285685614E+01 + 0.1502738322708307E+01 + 0.1504265391981018E+01 + 0.1505792493344401E+01 + 0.1507319626737978E+01 + 0.1508846792254525E+01 + 0.1510373990000000E+01 + 0.1511901220045897E+01 + 0.1513428482325843E+01 + 0.1514955776738997E+01 + 0.1516483103188187E+01 + 0.1518010461618856E+01 + 0.1519537852003950E+01 + 0.1521065274317310E+01 + 0.1522592728559390E+01 + 0.1524120214771875E+01 + 0.1525647733000000E+01 + 0.1527175283255735E+01 + 0.1528702865418007E+01 + 0.1530230479332476E+01 + 0.1531758124856680E+01 + 0.1533285801986194E+01 + 0.1534813510805648E+01 + 0.1536341251400453E+01 + 0.1537869023813705E+01 + 0.1539396828022928E+01 + 0.1540924664000000E+01 + 0.1542452531698884E+01 + 0.1543980431001864E+01 + 0.1545508361773304E+01 + 0.1547036323888449E+01 + 0.1548564317349007E+01 + 0.1550092342238281E+01 + 0.1551620398640153E+01 + 0.1553148486591967E+01 + 0.1554676606058918E+01 + 0.1556204757000000E+01 + 0.1557732939367264E+01 + 0.1559261153085024E+01 + 0.1560789398070656E+01 + 0.1562317674247958E+01 + 0.1563845981615441E+01 + 0.1565374320219806E+01 + 0.1566902690107604E+01 + 0.1568431091268010E+01 + 0.1569959523601276E+01 + 0.1571487987000000E+01 + 0.1573016481384368E+01 + 0.1574545006784888E+01 + 0.1576073563259650E+01 + 0.1577602150857708E+01 + 0.1579130769523023E+01 + 0.1580659419131762E+01 + 0.1582188099560457E+01 + 0.1583716810775544E+01 + 0.1585245552882802E+01 + 0.1586774326000000E+01 + 0.1588303130194591E+01 + 0.1589831965332784E+01 + 0.1591360831230479E+01 + 0.1592889727719211E+01 + 0.1594418654812358E+01 + 0.1595947612640607E+01 + 0.1597476601334645E+01 + 0.1599005620907705E+01 + 0.1600534671190981E+01 + 0.1602063752000001E+01 + 0.1603592863200914E+01 + 0.1605122004862337E+01 + 0.1606651177103504E+01 + 0.1608180380031319E+01 + 0.1609709613609338E+01 + 0.1611238877708634E+01 + 0.1612768172200030E+01 + 0.1614297497031794E+01 + 0.1615826852272238E+01 + 0.1617356238000000E+01 + 0.1618885654249930E+01 + 0.1620415100881734E+01 + 0.1621944577711331E+01 + 0.1623474084572209E+01 + 0.1625003621502091E+01 + 0.1626533188670468E+01 + 0.1628062786246864E+01 + 0.1629592414271042E+01 + 0.1631122072581642E+01 + 0.1632651761000001E+01 + 0.1634181479386726E+01 + 0.1635711227759511E+01 + 0.1637241006175322E+01 + 0.1638770814685883E+01 + 0.1640300653281969E+01 + 0.1641830521915039E+01 + 0.1643360420536058E+01 + 0.1644890349106006E+01 + 0.1646420307601377E+01 + 0.1647950296000000E+01 + 0.1649480314279381E+01 + 0.1651010362415725E+01 + 0.1652540440384918E+01 + 0.1654070548161888E+01 + 0.1655600685710524E+01 + 0.1657130852987582E+01 + 0.1658661049950192E+01 + 0.1660191276584707E+01 + 0.1661721532922791E+01 + 0.1663251819000001E+01 + 0.1664782134829490E+01 + 0.1666312480334789E+01 + 0.1667842855417025E+01 + 0.1669373259983980E+01 + 0.1670903694020831E+01 + 0.1672434157562684E+01 + 0.1673964650644979E+01 + 0.1675495173273222E+01 + 0.1677025725406522E+01 + 0.1678556307000000E+01 + 0.1680086918013184E+01 + 0.1681617558423251E+01 + 0.1683148228211789E+01 + 0.1684678927359146E+01 + 0.1686209655831290E+01 + 0.1687740413584905E+01 + 0.1689271200576978E+01 + 0.1690802016791814E+01 + 0.1692332862256059E+01 + 0.1693863737000001E+01 + 0.1695394641035932E+01 + 0.1696925574304163E+01 + 0.1698456536727009E+01 + 0.1699987528228469E+01 + 0.1701518548752143E+01 + 0.1703049598254274E+01 + 0.1704580676692141E+01 + 0.1706111784072433E+01 + 0.1707642920478429E+01 + 0.1709174086000000E+01 + 0.1710705280686380E+01 + 0.1712236504424275E+01 + 0.1713767757059759E+01 + 0.1715299038448471E+01 + 0.1716830348557290E+01 + 0.1718361687424861E+01 + 0.1719893055090744E+01 + 0.1721424451577732E+01 + 0.1722955876882629E+01 + 0.1724487331000001E+01 + 0.1726018813922302E+01 + 0.1727550325633537E+01 + 0.1729081866115594E+01 + 0.1730613435347106E+01 + 0.1732145033268802E+01 + 0.1733676659796960E+01 + 0.1735208314848162E+01 + 0.1736739998381485E+01 + 0.1738271710421889E+01 + 0.1739803451000000E+01 + 0.1741335220134944E+01 + 0.1742867017799847E+01 + 0.1744398843956338E+01 + 0.1745930698566007E+01 + 0.1747462581590004E+01 + 0.1748994492989199E+01 + 0.1750526432724899E+01 + 0.1752058400785100E+01 + 0.1753590397199162E+01 + 0.1755122422000001E+01 + 0.1756654475199625E+01 + 0.1758186556726411E+01 + 0.1759718666487826E+01 + 0.1761250804396560E+01 + 0.1762782970426007E+01 + 0.1764315164588729E+01 + 0.1765847386898105E+01 + 0.1767379637377309E+01 + 0.1768911916064715E+01 + 0.1770444223000000E+01 + 0.1771976558187576E+01 + 0.1773508921490784E+01 + 0.1775041312737698E+01 + 0.1776573731772887E+01 + 0.1778106178632623E+01 + 0.1779638653476872E+01 + 0.1781171156465716E+01 + 0.1782703687642873E+01 + 0.1784236246871690E+01 + 0.1785768834000001E+01 + 0.1787301448894438E+01 + 0.1788834091496848E+01 + 0.1790366761767877E+01 + 0.1791899459677403E+01 + 0.1793432185302619E+01 + 0.1794964938789949E+01 + 0.1796497720284662E+01 + 0.1798030529793302E+01 + 0.1799563367107403E+01 + 0.1801096232000000E+01 + 0.1802629124300670E+01 + 0.1804162044065150E+01 + 0.1805694991405718E+01 + 0.1807227966426139E+01 + 0.1808760969131188E+01 + 0.1810293999461782E+01 + 0.1811827057357936E+01 + 0.1813360142769467E+01 + 0.1814893255661383E+01 + 0.1816426396000000E+01 + 0.1817959563762729E+01 + 0.1819492758971359E+01 + 0.1821025981658779E+01 + 0.1822559231851416E+01 + 0.1824092509500644E+01 + 0.1825625814509408E+01 + 0.1827159146780666E+01 + 0.1828692506266416E+01 + 0.1830225892994675E+01 + 0.1831759307000000E+01 + 0.1833292748304459E+01 + 0.1834826216880178E+01 + 0.1836359712686794E+01 + 0.1837893235684206E+01 + 0.1839426785835325E+01 + 0.1840960363105010E+01 + 0.1842493967458487E+01 + 0.1844027598880943E+01 + 0.1845561257388514E+01 + 0.1847094943000000E+01 + 0.1848628655724385E+01 + 0.1850162395531397E+01 + 0.1851696162380955E+01 + 0.1853229956233942E+01 + 0.1854763777062508E+01 + 0.1856297624846069E+01 + 0.1857831499564039E+01 + 0.1859365401188576E+01 + 0.1860899329680583E+01 + 0.1862433285000000E+01 + 0.1863967267116560E+01 + 0.1865501276039179E+01 + 0.1867035311786573E+01 + 0.1868569374374814E+01 + 0.1870103463789253E+01 + 0.1871637579995431E+01 + 0.1873171722958512E+01 + 0.1874705892641163E+01 + 0.1876240089002174E+01 + 0.1877774312000000E+01 + 0.1879308561606518E+01 + 0.1880842837847274E+01 + 0.1882377140761234E+01 + 0.1883911470379793E+01 + 0.1885445826646351E+01 + 0.1886980209447537E+01 + 0.1888514618670319E+01 + 0.1890049054278937E+01 + 0.1891583516357394E+01 + 0.1893118005000000E+01 + 0.1894652520268526E+01 + 0.1896187062094594E+01 + 0.1897721630377292E+01 + 0.1899256225019965E+01 + 0.1900790845975479E+01 + 0.1902325493228648E+01 + 0.1903860166764895E+01 + 0.1905394866574153E+01 + 0.1906929592653346E+01 + 0.1908464345000000E+01 + 0.1909999123616145E+01 + 0.1911533928521826E+01 + 0.1913068759741593E+01 + 0.1914603617294058E+01 + 0.1916138501128783E+01 + 0.1917673411150785E+01 + 0.1919208347265139E+01 + 0.1920743309425101E+01 + 0.1922278297658602E+01 + 0.1923813312000000E+01 + 0.1925348352470976E+01 + 0.1926883419042505E+01 + 0.1928418511672889E+01 + 0.1929953630321029E+01 + 0.1931488774952792E+01 + 0.1933023945538545E+01 + 0.1934559142048899E+01 + 0.1936094364464647E+01 + 0.1937629612782369E+01 + 0.1939164887000000E+01 + 0.1940700187122125E+01 + 0.1942235513179908E+01 + 0.1943770865211163E+01 + 0.1945306243244470E+01 + 0.1946841647201053E+01 + 0.1948377076932878E+01 + 0.1949912532292128E+01 + 0.1951448013213256E+01 + 0.1952983519758233E+01 + 0.1954519052000000E+01 + 0.1956054610002579E+01 + 0.1957590193794314E+01 + 0.1959125803394630E+01 + 0.1960661438814554E+01 + 0.1962197099967483E+01 + 0.1963732786703823E+01 + 0.1965268498874465E+01 + 0.1966804236422068E+01 + 0.1968339999431534E+01 + 0.1969875788000000E+01 + 0.1971411602195764E+01 + 0.1972947441971753E+01 + 0.1974483307252059E+01 + 0.1976019197966717E+01 + 0.1977555114114891E+01 + 0.1979091055740343E+01 + 0.1980627022886675E+01 + 0.1982163015543186E+01 + 0.1983699033614998E+01 + 0.1985235077000000E+01 + 0.1986771145619754E+01 + 0.1988307239490534E+01 + 0.1989843358652292E+01 + 0.1991379503140156E+01 + 0.1992915672933204E+01 + 0.1994451867974344E+01 + 0.1995988088206420E+01 + 0.1997524333604314E+01 + 0.1999060604192569E+01 + 0.2000596900000000E+01 + 0.2002133221041027E+01 + 0.2003669567272473E+01 + 0.2005205938636772E+01 + 0.2006742335081146E+01 + 0.2008278756608520E+01 + 0.2009815203257759E+01 + 0.2011351675067466E+01 + 0.2012888172024484E+01 + 0.2014424694035423E+01 + 0.2015961241000000E+01 + 0.2017497812840921E+01 + 0.2019034409572877E+01 + 0.2020571031233548E+01 + 0.2022107677856268E+01 + 0.2023644349423775E+01 + 0.2025181045886163E+01 + 0.2026717767193311E+01 + 0.2028254513314559E+01 + 0.2029791284249420E+01 + 0.2031328080000000E+01 + 0.2032864900575059E+01 + 0.2034401746009964E+01 + 0.2035938616346733E+01 + 0.2037475511616907E+01 + 0.2039012431730206E+01 + 0.2040549376517757E+01 + 0.2042086345811369E+01 + 0.2043623339562445E+01 + 0.2045160357907750E+01 + 0.2046697401000000E+01 + 0.2048234468947010E+01 + 0.2049771561677008E+01 + 0.2051308679073323E+01 + 0.2052845821024552E+01 + 0.2054382987480508E+01 + 0.2055920178430498E+01 + 0.2057457393864519E+01 + 0.2058994633774361E+01 + 0.2060531898154586E+01 + 0.2062069187000000E+01 + 0.2063606500311408E+01 + 0.2065143838113626E+01 + 0.2066681200437473E+01 + 0.2068218587306416E+01 + 0.2069755998658442E+01 + 0.2071293434376390E+01 + 0.2072830894343633E+01 + 0.2074368378530799E+01 + 0.2075905887043754E+01 + 0.2077443420000000E+01 + 0.2078980977465800E+01 + 0.2080518559302468E+01 + 0.2082056165320080E+01 + 0.2083593795345802E+01 + 0.2085131449405504E+01 + 0.2086669127653242E+01 + 0.2088206830243566E+01 + 0.2089744557232116E+01 + 0.2091282308521214E+01 + 0.2092820084000000E+01 + 0.2094357883569960E+01 + 0.2095895707182000E+01 + 0.2097433554799375E+01 + 0.2098971426391888E+01 + 0.2100509322005455E+01 + 0.2102047241735095E+01 + 0.2103585185674913E+01 + 0.2105123153815145E+01 + 0.2106661145985043E+01 + 0.2108199162000000E+01 + 0.2109737201732280E+01 + 0.2111275265281591E+01 + 0.2112813352804501E+01 + 0.2114351464444038E+01 + 0.2115889600185791E+01 + 0.2117427759913774E+01 + 0.2118965943510975E+01 + 0.2120504150900318E+01 + 0.2122042382066613E+01 + 0.2123580637000000E+01 + 0.2125118915691445E+01 + 0.2126657218135246E+01 + 0.2128195544326530E+01 + 0.2129733894262114E+01 + 0.2131272267958465E+01 + 0.2132810665444721E+01 + 0.2134349086749356E+01 + 0.2135887531848297E+01 + 0.2137426000636022E+01 + 0.2138964493000000E+01 + 0.2140503008862587E+01 + 0.2142041548285663E+01 + 0.2143580111365996E+01 + 0.2145118698190013E+01 + 0.2146657308723993E+01 + 0.2148195942856699E+01 + 0.2149734600476474E+01 + 0.2151273281524216E+01 + 0.2152811986022273E+01 + 0.2154350714000000E+01 + 0.2155889465481042E+01 + 0.2157428240466222E+01 + 0.2158967038950649E+01 + 0.2160505860929193E+01 + 0.2162044706393902E+01 + 0.2163583575335002E+01 + 0.2165122467742021E+01 + 0.2166661383564451E+01 + 0.2168200322689743E+01 + 0.2169739285000000E+01 + 0.2171278270423212E+01 + 0.2172817279070872E+01 + 0.2174356311100348E+01 + 0.2175895366651977E+01 + 0.2177434445668060E+01 + 0.2178973547963141E+01 + 0.2180512673351448E+01 + 0.2182051821756314E+01 + 0.2183590993270171E+01 + 0.2185130188000000E+01 + 0.2186669406021893E+01 + 0.2188208647288407E+01 + 0.2189747911721208E+01 + 0.2191287199248025E+01 + 0.2192826509867010E+01 + 0.2194365843621747E+01 + 0.2195905200555696E+01 + 0.2197444580659207E+01 + 0.2198983983840323E+01 + 0.2200523410000000E+01 + 0.2202062859060344E+01 + 0.2203602331028029E+01 + 0.2205141825930874E+01 + 0.2206681343794720E+01 + 0.2208220884622413E+01 + 0.2209760448401970E+01 + 0.2211300035121361E+01 + 0.2212839644780912E+01 + 0.2214379277400087E+01 + 0.2215918933000000E+01 + 0.2217458611586206E+01 + 0.2218998313102045E+01 + 0.2220538037475304E+01 + 0.2222077784634552E+01 + 0.2223617554517530E+01 + 0.2225157347067886E+01 + 0.2226697162230551E+01 + 0.2228237000021369E+01 + 0.2229776860566112E+01 + 0.2231316744000000E+01 + 0.2232856650408949E+01 + 0.2234396579681625E+01 + 0.2235936531657383E+01 + 0.2237476506184567E+01 + 0.2239016503215999E+01 + 0.2240556522771913E+01 + 0.2242096564873993E+01 + 0.2243636629563881E+01 + 0.2245176716914141E+01 + 0.2246716827000000E+01 + 0.2248256959857435E+01 + 0.2249797115365436E+01 + 0.2251337293363749E+01 + 0.2252877493703970E+01 + 0.2254417716375509E+01 + 0.2255957961456682E+01 + 0.2257498229026813E+01 + 0.2259038519136806E+01 + 0.2260578831793515E+01 + 0.2262119167000001E+01 + 0.2263659524743475E+01 + 0.2265199904947740E+01 + 0.2266740307520744E+01 + 0.2268280732377015E+01 + 0.2269821179507539E+01 + 0.2271361648952637E+01 + 0.2272902140752743E+01 + 0.2274442654906205E+01 + 0.2275983191346127E+01 + 0.2277523750000000E+01 + 0.2279064330821884E+01 + 0.2280604933872104E+01 + 0.2282145559237558E+01 + 0.2283686206995261E+01 + 0.2285226877107442E+01 + 0.2286767569462264E+01 + 0.2288308283947614E+01 + 0.2289849020508580E+01 + 0.2291389779178915E+01 + 0.2292930560000001E+01 + 0.2294471362997578E+01 + 0.2296012188134831E+01 + 0.2297553035359304E+01 + 0.2299093904621451E+01 + 0.2300634795905536E+01 + 0.2302175709217636E+01 + 0.2303716644564315E+01 + 0.2305257601959639E+01 + 0.2306798581429303E+01 + 0.2308339583000000E+01 + 0.2309880606675105E+01 + 0.2311421652364723E+01 + 0.2312962719955642E+01 + 0.2314503809345279E+01 + 0.2316044920554702E+01 + 0.2317586053684739E+01 + 0.2319127208836098E+01 + 0.2320668386022229E+01 + 0.2322209585121339E+01 + 0.2323750806000001E+01 + 0.2325292048564948E+01 + 0.2326833312883568E+01 + 0.2328374599063413E+01 + 0.2329915907200067E+01 + 0.2331457237250000E+01 + 0.2332998589079935E+01 + 0.2334539962556588E+01 + 0.2336081357636432E+01 + 0.2337622774415052E+01 + 0.2339164213000000E+01 + 0.2340705673458665E+01 + 0.2342247155697778E+01 + 0.2343788659583907E+01 + 0.2345330184995251E+01 + 0.2346871731945273E+01 + 0.2348413300534699E+01 + 0.2349954890864379E+01 + 0.2351496502955361E+01 + 0.2353038136704997E+01 + 0.2354579792000001E+01 + 0.2356121468750458E+01 + 0.2357663166959965E+01 + 0.2359204886655492E+01 + 0.2360746627862944E+01 + 0.2362288390595848E+01 + 0.2363830174859741E+01 + 0.2365371980659697E+01 + 0.2366913807980786E+01 + 0.2368455656777085E+01 + 0.2369997527000000E+01 + 0.2371539418613534E+01 + 0.2373081331632055E+01 + 0.2374623266082528E+01 + 0.2376165221987655E+01 + 0.2377707199320644E+01 + 0.2379249198022770E+01 + 0.2380791218035437E+01 + 0.2382333259339801E+01 + 0.2383875321978632E+01 + 0.2385417406000002E+01 + 0.2386959511421795E+01 + 0.2388501638141173E+01 + 0.2390043786025110E+01 + 0.2391585954955056E+01 + 0.2393128144980688E+01 + 0.2394670356260225E+01 + 0.2396212588951576E+01 + 0.2397754843085570E+01 + 0.2399297118496071E+01 + 0.2400839415000000E+01 + 0.2402381732459172E+01 + 0.2403924070914985E+01 + 0.2405466430453738E+01 + 0.2407008811157457E+01 + 0.2408551213058572E+01 + 0.2410093636157516E+01 + 0.2411636080453658E+01 + 0.2413178545914593E+01 + 0.2414721032458671E+01 + 0.2416263540000001E+01 + 0.2417806068470286E+01 + 0.2419348617871590E+01 + 0.2420891188223571E+01 + 0.2422433779545270E+01 + 0.2423976391848621E+01 + 0.2425519025140964E+01 + 0.2427061679429223E+01 + 0.2428604354699578E+01 + 0.2430147050906077E+01 + 0.2431689768000000E+01 + 0.2433232505945016E+01 + 0.2434775264754350E+01 + 0.2436318044453613E+01 + 0.2437860845064500E+01 + 0.2439403666563155E+01 + 0.2440946508896339E+01 + 0.2442489372010822E+01 + 0.2444032255883390E+01 + 0.2445575160537346E+01 + 0.2447118086000002E+01 + 0.2448661032284858E+01 + 0.2450203999350219E+01 + 0.2451746987140582E+01 + 0.2453289995604802E+01 + 0.2454833024742365E+01 + 0.2456376074585426E+01 + 0.2457919145166015E+01 + 0.2459462236476167E+01 + 0.2461005348445925E+01 + 0.2462548481000000E+01 + 0.2464091634093393E+01 + 0.2465634807802275E+01 + 0.2467178002233110E+01 + 0.2468721217477790E+01 + 0.2470264453458843E+01 + 0.2471807709989530E+01 + 0.2473350986883451E+01 + 0.2474894284083965E+01 + 0.2476437601735554E+01 + 0.2477980940000002E+01 + 0.2479524298989695E+01 + 0.2481067678619459E+01 + 0.2482611078754725E+01 + 0.2484154499270162E+01 + 0.2485697940147827E+01 + 0.2487241401439056E+01 + 0.2488784883195554E+01 + 0.2490328385421653E+01 + 0.2491871908048269E+01 + 0.2493415451000000E+01 + 0.2494959014228531E+01 + 0.2496502597793889E+01 + 0.2498046201783189E+01 + 0.2499589826273760E+01 + 0.2501133471229164E+01 + 0.2502677136539570E+01 + 0.2504220822094813E+01 + 0.2505764527838120E+01 + 0.2507308253795481E+01 + 0.2508852000000000E+01 + 0.2510395766475706E+01 + 0.2511939553210305E+01 + 0.2513483360182427E+01 + 0.2515027187374340E+01 + 0.2516571034810656E+01 + 0.2518114902543299E+01 + 0.2519658790623168E+01 + 0.2521202699012070E+01 + 0.2522746627533731E+01 + 0.2524290576000000E+01 + 0.2525834544289788E+01 + 0.2527378532550259E+01 + 0.2528922540995643E+01 + 0.2530466569820563E+01 + 0.2532010618991741E+01 + 0.2533554688328866E+01 + 0.2535098777650494E+01 + 0.2536642886854288E+01 + 0.2538187015960517E+01 + 0.2539731165000000E+01 + 0.2541275334008335E+01 + 0.2542819523040229E+01 + 0.2544363732155171E+01 + 0.2545907961404439E+01 + 0.2547452210743867E+01 + 0.2548996480067710E+01 + 0.2550540769270129E+01 + 0.2552085078300969E+01 + 0.2553629407196396E+01 + 0.2555173756000000E+01 + 0.2556718124736842E+01 + 0.2558262513357860E+01 + 0.2559806921795463E+01 + 0.2561351349988596E+01 + 0.2562895797952191E+01 + 0.2564440265750209E+01 + 0.2565984753446845E+01 + 0.2567529261071371E+01 + 0.2569073788598928E+01 + 0.2570618336000000E+01 + 0.2572162903231873E+01 + 0.2573707490199030E+01 + 0.2575252096792756E+01 + 0.2576796722916635E+01 + 0.2578341368617253E+01 + 0.2579886034033448E+01 + 0.2581430719303938E+01 + 0.2582975424467747E+01 + 0.2584520149409366E+01 + 0.2586064894000000E+01 + 0.2587609658140788E+01 + 0.2589154441852604E+01 + 0.2590699245186258E+01 + 0.2592244068186376E+01 + 0.2593788910825676E+01 + 0.2595333773030489E+01 + 0.2596878654727359E+01 + 0.2598423555901864E+01 + 0.2599968476631091E+01 + 0.2601513417000000E+01 + 0.2603058377062158E+01 + 0.2604603356745562E+01 + 0.2606148355946818E+01 + 0.2607693374567866E+01 + 0.2609238412572653E+01 + 0.2610783469965130E+01 + 0.2612328546750410E+01 + 0.2613873642963349E+01 + 0.2615418758684904E+01 + 0.2616963894000000E+01 + 0.2618509048949020E+01 + 0.2620054223394193E+01 + 0.2621599417153208E+01 + 0.2623144630060574E+01 + 0.2624689862146352E+01 + 0.2626235113566756E+01 + 0.2627780384478345E+01 + 0.2629325674932017E+01 + 0.2630870984814891E+01 + 0.2632416314000000E+01 + 0.2633961662385796E+01 + 0.2635507029972410E+01 + 0.2637052416785395E+01 + 0.2638597822850265E+01 + 0.2640143248192077E+01 + 0.2641688692835594E+01 + 0.2643234156804651E+01 + 0.2644779640067775E+01 + 0.2646325142507752E+01 + 0.2647870664000000E+01 + 0.2649416204465628E+01 + 0.2650961764008524E+01 + 0.2652507342778266E+01 + 0.2654052940909656E+01 + 0.2655598558365662E+01 + 0.2657144194998390E+01 + 0.2658689850659803E+01 + 0.2660235525303752E+01 + 0.2661781219042026E+01 + 0.2663326932000000E+01 + 0.2664872664250526E+01 + 0.2666418415656366E+01 + 0.2667964186027764E+01 + 0.2669509975191623E+01 + 0.2671055783168550E+01 + 0.2672601610104122E+01 + 0.2674147456144609E+01 + 0.2675693321353125E+01 + 0.2677239205663880E+01 + 0.2678785109000000E+01 + 0.2680331031297063E+01 + 0.2681876972540459E+01 + 0.2683422932728032E+01 + 0.2684968911853952E+01 + 0.2686514909869717E+01 + 0.2688060926699285E+01 + 0.2689606962267534E+01 + 0.2691153016581801E+01 + 0.2692699089777241E+01 + 0.2694245182000000E+01 + 0.2695791293341187E+01 + 0.2697337423671748E+01 + 0.2698883572807588E+01 + 0.2700429740578851E+01 + 0.2701975926981201E+01 + 0.2703522132117086E+01 + 0.2705068356089655E+01 + 0.2706614598937223E+01 + 0.2708160860597612E+01 + 0.2709707141000000E+01 + 0.2711253440088214E+01 + 0.2712799757864663E+01 + 0.2714346094346406E+01 + 0.2715892449549785E+01 + 0.2717438823482841E+01 + 0.2718985216148250E+01 + 0.2720531627548421E+01 + 0.2722078057674643E+01 + 0.2723624506500977E+01 + 0.2725170974000000E+01 + 0.2726717460139711E+01 + 0.2728263964869787E+01 + 0.2729810488135321E+01 + 0.2731357029888321E+01 + 0.2732903590161133E+01 + 0.2734450169037928E+01 + 0.2735996766602461E+01 + 0.2737543382861339E+01 + 0.2739090017701601E+01 + 0.2740636671000000E+01 + 0.2742183342667825E+01 + 0.2743730032754489E+01 + 0.2745276741343941E+01 + 0.2746823468513489E+01 + 0.2748370214263229E+01 + 0.2749916978543443E+01 + 0.2751463761303629E+01 + 0.2753010562495796E+01 + 0.2754557382075842E+01 + 0.2756104220000000E+01 + 0.2757651076242399E+01 + 0.2759197950848757E+01 + 0.2760744843882682E+01 + 0.2762291755402244E+01 + 0.2763838685401044E+01 + 0.2765385633831092E+01 + 0.2766932600643817E+01 + 0.2768479585797236E+01 + 0.2770026589259592E+01 + 0.2771573611000000E+01 + 0.2773120650994430E+01 + 0.2774667709246241E+01 + 0.2776214785765638E+01 + 0.2777761880561836E+01 + 0.2779308993632474E+01 + 0.2780856124967731E+01 + 0.2782403274557904E+01 + 0.2783950442407930E+01 + 0.2785497628545436E+01 + 0.2787044833000000E+01 + 0.2788592055778208E+01 + 0.2790139296794687E+01 + 0.2791686555941069E+01 + 0.2793233833118286E+01 + 0.2794781128335340E+01 + 0.2796328441670948E+01 + 0.2797875773204198E+01 + 0.2799423122966379E+01 + 0.2800970490914702E+01 + 0.2802517877000000E+01 + 0.2804065281173769E+01 + 0.2805612703390123E+01 + 0.2807160143603833E+01 + 0.2808707601775270E+01 + 0.2810255077929843E+01 + 0.2811802572134928E+01 + 0.2813350084457783E+01 + 0.2814897614916345E+01 + 0.2816445163452110E+01 + 0.2817992730000000E+01 + 0.2819540314510820E+01 + 0.2821087916998926E+01 + 0.2822635537494558E+01 + 0.2824183176023703E+01 + 0.2825730832562909E+01 + 0.2827278507056820E+01 + 0.2828826199450090E+01 + 0.2830373909719661E+01 + 0.2831921637892531E+01 + 0.2833469384000000E+01 + 0.2835017148056601E+01 + 0.2836564930009782E+01 + 0.2838112729790221E+01 + 0.2839660547336168E+01 + 0.2841208382673879E+01 + 0.2842756235886399E+01 + 0.2844304107056546E+01 + 0.2845851996197289E+01 + 0.2847399903213315E+01 + 0.2848947828000000E+01 + 0.2850495770471905E+01 + 0.2852043730620360E+01 + 0.2853591708455883E+01 + 0.2855139703991561E+01 + 0.2856687717270356E+01 + 0.2858235748354495E+01 + 0.2859783797305530E+01 + 0.2861331864125288E+01 + 0.2862879948723017E+01 + 0.2864428051000000E+01 + 0.2865976170875363E+01 + 0.2867524308339577E+01 + 0.2869072463400956E+01 + 0.2870620636070633E+01 + 0.2872168826392554E+01 + 0.2873717034431838E+01 + 0.2875265260252877E+01 + 0.2876813503855756E+01 + 0.2878361765140859E+01 + 0.2879910044000000E+01 + 0.2881458340350231E+01 + 0.2883006654209598E+01 + 0.2884554985621385E+01 + 0.2886103334623536E+01 + 0.2887651701191850E+01 + 0.2889200085262032E+01 + 0.2890748486769857E+01 + 0.2892296905695367E+01 + 0.2893845342087227E+01 + 0.2895393796000000E+01 + 0.2896942267480610E+01 + 0.2898490756545402E+01 + 0.2900039263203075E+01 + 0.2901587787457488E+01 + 0.2903136329256200E+01 + 0.2904684888510449E+01 + 0.2906233465131567E+01 + 0.2907782059073170E+01 + 0.2909330670354390E+01 + 0.2910879299000000E+01 + 0.2912427945029020E+01 + 0.2913976608437483E+01 + 0.2915525289215676E+01 + 0.2917073987355057E+01 + 0.2918622702860752E+01 + 0.2920171435746706E+01 + 0.2921720186026635E+01 + 0.2923268953691759E+01 + 0.2924817738698431E+01 + 0.2926366541000002E+01 + 0.2927915360559348E+01 + 0.2929464197377445E+01 + 0.2931013051464792E+01 + 0.2932561922831599E+01 + 0.2934110811484720E+01 + 0.2935659717428844E+01 + 0.2937208640668412E+01 + 0.2938757581195365E+01 + 0.2940306538982264E+01 + 0.2941855514000000E+01 + 0.2943404506215947E+01 + 0.2944953515583403E+01 + 0.2946502542052147E+01 + 0.2948051585577796E+01 + 0.2949600646183828E+01 + 0.2951149723937504E+01 + 0.2952698818906028E+01 + 0.2954247931109292E+01 + 0.2955797060493865E+01 + 0.2957346207000001E+01 + 0.2958895370579414E+01 + 0.2960444551229626E+01 + 0.2961993748959614E+01 + 0.2963542963779087E+01 + 0.2965092195706287E+01 + 0.2966641444764962E+01 + 0.2968190710978155E+01 + 0.2969739994321446E+01 + 0.2971289294696837E+01 + 0.2972838612000000E+01 + 0.2974387946155574E+01 + 0.2975937297204065E+01 + 0.2977486665214947E+01 + 0.2979036050253687E+01 + 0.2980585452339239E+01 + 0.2982134871460539E+01 + 0.2983684307605953E+01 + 0.2985233760759527E+01 + 0.2986783230898617E+01 + 0.2988332718000001E+01 + 0.2989882222034734E+01 + 0.2991431742950988E+01 + 0.2992981280691212E+01 + 0.2994530835205213E+01 + 0.2996080406528319E+01 + 0.2997629994751037E+01 + 0.2999179599963321E+01 + 0.3000729222167142E+01 + 0.3002278861228084E+01 + 0.3003828517000000E+01 + 0.3005378189389296E+01 + 0.3006927878512583E+01 + 0.3008477584539026E+01 + 0.3010027307619234E+01 + 0.3011577047688157E+01 + 0.3013126804541608E+01 + 0.3014676577975408E+01 + 0.3016226367925148E+01 + 0.3017776174543057E+01 + 0.3019325998000001E+01 + 0.3020875838412874E+01 + 0.3022425695682693E+01 + 0.3023975569656502E+01 + 0.3025525460194677E+01 + 0.3027075367312537E+01 + 0.3028625291125372E+01 + 0.3030175231748467E+01 + 0.3031725189197179E+01 + 0.3033275163331976E+01 + 0.3034825154000000E+01 + 0.3036375161102283E+01 + 0.3037925184755412E+01 + 0.3039475225129868E+01 + 0.3041025282377580E+01 + 0.3042575356434900E+01 + 0.3044125447099093E+01 + 0.3045675554167380E+01 + 0.3047225677573575E+01 + 0.3048775817463203E+01 + 0.3050325974000002E+01 + 0.3051876147299434E+01 + 0.3053426337283878E+01 + 0.3054976543827437E+01 + 0.3056526766811215E+01 + 0.3058077006197687E+01 + 0.3059627262001825E+01 + 0.3061177534239763E+01 + 0.3062727822944918E+01 + 0.3064278128177494E+01 + 0.3065828450000000E+01 + 0.3067378788447213E+01 + 0.3068929143442984E+01 + 0.3070479514883433E+01 + 0.3072029902671241E+01 + 0.3073580306785382E+01 + 0.3075130727254047E+01 + 0.3076681164105998E+01 + 0.3078231617354739E+01 + 0.3079782086990131E+01 + 0.3081332573000001E+01 + 0.3082883075377485E+01 + 0.3084433594136951E+01 + 0.3085984129298077E+01 + 0.3087534680876282E+01 + 0.3089085248837495E+01 + 0.3090635833115710E+01 + 0.3092186433645329E+01 + 0.3093737050416670E+01 + 0.3095287683506740E+01 + 0.3096838333000000E+01 + 0.3098388998948617E+01 + 0.3099939681275573E+01 + 0.3101490379871559E+01 + 0.3103041094634081E+01 + 0.3104591825539924E+01 + 0.3106142572617022E+01 + 0.3107693335893947E+01 + 0.3109244115386450E+01 + 0.3110794911090411E+01 + 0.3112345723000001E+01 + 0.3113896551109450E+01 + 0.3115447395413230E+01 + 0.3116998255905872E+01 + 0.3118549132583548E+01 + 0.3120100025461468E+01 + 0.3121650934567132E+01 + 0.3123201859927420E+01 + 0.3124752801519937E+01 + 0.3126303759245911E+01 + 0.3127854733000000E+01 + 0.3129405722706030E+01 + 0.3130956728404499E+01 + 0.3132507750165076E+01 + 0.3134058788053430E+01 + 0.3135609842088728E+01 + 0.3137160912260143E+01 + 0.3138711998556264E+01 + 0.3140263100960859E+01 + 0.3141814219450222E+01 + 0.3143365354000002E+01 + 0.3144916504581026E+01 + 0.3146467671144847E+01 + 0.3148018853638196E+01 + 0.3149570052014159E+01 + 0.3151121266299703E+01 + 0.3152672496569461E+01 + 0.3154223742897862E+01 + 0.3155775005299382E+01 + 0.3157326283695574E+01 + 0.3158877578000000E+01 + 0.3160428888158680E+01 + 0.3161980214247486E+01 + 0.3163531556374752E+01 + 0.3165082914634331E+01 + 0.3166634288951741E+01 + 0.3168185679143897E+01 + 0.3169737085027945E+01 + 0.3171288506543301E+01 + 0.3172839943818905E+01 + 0.3174391397000000E+01 + 0.3175942866195611E+01 + 0.3177494351369876E+01 + 0.3179045852450717E+01 + 0.3180597369368679E+01 + 0.3182148902084822E+01 + 0.3183700450579893E+01 + 0.3185252014834998E+01 + 0.3186803594832981E+01 + 0.3188355190559388E+01 + 0.3189906802000000E+01 + 0.3191458429155600E+01 + 0.3193010072086993E+01 + 0.3194561730869987E+01 + 0.3196113405570379E+01 + 0.3197665096137520E+01 + 0.3199216802445647E+01 + 0.3200768524369196E+01 + 0.3202320261869741E+01 + 0.3203872015043923E+01 + 0.3205423784000000E+01 + 0.3206975568804186E+01 + 0.3208527369354507E+01 + 0.3210079185506943E+01 + 0.3211631017131691E+01 + 0.3213182864264186E+01 + 0.3214734727046466E+01 + 0.3216286605620802E+01 + 0.3217838500036469E+01 + 0.3219390410198618E+01 + 0.3220942336000000E+01 + 0.3222494277344770E+01 + 0.3224046234182704E+01 + 0.3225598206474984E+01 + 0.3227150194189673E+01 + 0.3228702197374825E+01 + 0.3230254216130103E+01 + 0.3231806250555168E+01 + 0.3233358300697904E+01 + 0.3234910366525940E+01 + 0.3236462448000000E+01 + 0.3238014545069786E+01 + 0.3239566657640897E+01 + 0.3241118785607907E+01 + 0.3242670928877363E+01 + 0.3244223087494965E+01 + 0.3245775261596192E+01 + 0.3247327451316443E+01 + 0.3248879656696505E+01 + 0.3250431877630516E+01 + 0.3251984114000000E+01 + 0.3253536365708383E+01 + 0.3255088632746692E+01 + 0.3256640915127855E+01 + 0.3258193212867460E+01 + 0.3259745526011995E+01 + 0.3261297854627895E+01 + 0.3262850198780782E+01 + 0.3264402558467856E+01 + 0.3265954933580256E+01 + 0.3267507324000000E+01 + 0.3269059729642299E+01 + 0.3270612150555124E+01 + 0.3272164586819644E+01 + 0.3273717038510810E+01 + 0.3275269505631326E+01 + 0.3276821988137288E+01 + 0.3278374485983890E+01 + 0.3279926999119014E+01 + 0.3281479527479195E+01 + 0.3283032071000000E+01 + 0.3284584629651136E+01 + 0.3286137203538887E+01 + 0.3287689792803678E+01 + 0.3289242397570448E+01 + 0.3290795017784042E+01 + 0.3292347653273127E+01 + 0.3293900303865911E+01 + 0.3295452969479467E+01 + 0.3297005650168610E+01 + 0.3298558346000000E+01 + 0.3300111057040628E+01 + 0.3301663783358789E+01 + 0.3303216525023109E+01 + 0.3304769282089975E+01 + 0.3306322054473529E+01 + 0.3307874841996143E+01 + 0.3309427644480762E+01 + 0.3310980461876695E+01 + 0.3312533294329103E+01 + 0.3314086142000000E+01 + 0.3315639005000248E+01 + 0.3317191883236108E+01 + 0.3318744776562689E+01 + 0.3320297684846876E+01 + 0.3321850608092435E+01 + 0.3323403546391440E+01 + 0.3324956499836448E+01 + 0.3326509468460439E+01 + 0.3328062452204057E+01 + 0.3329615451000000E+01 + 0.3331168464794463E+01 + 0.3332721493587604E+01 + 0.3334274537393076E+01 + 0.3335827596224485E+01 + 0.3337380670094884E+01 + 0.3338933759016966E+01 + 0.3340486863002945E+01 + 0.3342039982036480E+01 + 0.3343593116056968E+01 + 0.3345146265000000E+01 + 0.3346699428825727E+01 + 0.3348252607592536E+01 + 0.3349805801383377E+01 + 0.3351359010271894E+01 + 0.3352912234223624E+01 + 0.3354465473134343E+01 + 0.3356018726899413E+01 + 0.3357571995458621E+01 + 0.3359125278820624E+01 + 0.3360678577000000E+01 + 0.3362231890016743E+01 + 0.3363785217912503E+01 + 0.3365338560734344E+01 + 0.3366891918524992E+01 + 0.3368445291276708E+01 + 0.3369998678949194E+01 + 0.3371552081501580E+01 + 0.3373105498891197E+01 + 0.3374658931072573E+01 + 0.3376212378000000E+01 + 0.3377765839645670E+01 + 0.3379319316053355E+01 + 0.3380872807284729E+01 + 0.3382426313396492E+01 + 0.3383979834387566E+01 + 0.3385533370219592E+01 + 0.3387086920853415E+01 + 0.3388640486239221E+01 + 0.3390194066310669E+01 + 0.3391747661000000E+01 + 0.3393301270275414E+01 + 0.3394854894248971E+01 + 0.3396408533068694E+01 + 0.3397962186865403E+01 + 0.3399515855569939E+01 + 0.3401069538984118E+01 + 0.3402623236909879E+01 + 0.3404176949285320E+01 + 0.3405730676259591E+01 + 0.3407284418000000E+01 + 0.3408838174621822E+01 + 0.3410391946032194E+01 + 0.3411945732086221E+01 + 0.3413499532650525E+01 + 0.3415053347725579E+01 + 0.3416607177398216E+01 + 0.3418161021755879E+01 + 0.3419714880836209E+01 + 0.3421268754599649E+01 + 0.3422822643000000E+01 + 0.3424376545987850E+01 + 0.3425930463500932E+01 + 0.3427484395473764E+01 + 0.3429038341851313E+01 + 0.3430592302700026E+01 + 0.3432146278164721E+01 + 0.3433700268389414E+01 + 0.3435254273391777E+01 + 0.3436808292993643E+01 + 0.3438362327000000E+01 + 0.3439916375272996E+01 + 0.3441470437903394E+01 + 0.3443024515039118E+01 + 0.3444578606817197E+01 + 0.3446132713248018E+01 + 0.3447686834260266E+01 + 0.3449240969781594E+01 + 0.3450795119759458E+01 + 0.3452349284171999E+01 + 0.3453903463000000E+01 + 0.3455457656225369E+01 + 0.3457011863834529E+01 + 0.3458566085815024E+01 + 0.3460120322158427E+01 + 0.3461674572903086E+01 + 0.3463228838117522E+01 + 0.3464783117869710E+01 + 0.3466337412164405E+01 + 0.3467891720908387E+01 + 0.3469446044000000E+01 + 0.3471000381356802E+01 + 0.3472554732973166E+01 + 0.3474109098862673E+01 + 0.3475663479040570E+01 + 0.3477217873541479E+01 + 0.3478772282412523E+01 + 0.3480326705700489E+01 + 0.3481881143419484E+01 + 0.3483435595532957E+01 + 0.3484990062000000E+01 + 0.3486544542778904E+01 + 0.3488099037824772E+01 + 0.3489653547091906E+01 + 0.3491208070539914E+01 + 0.3492762608190054E+01 + 0.3494317160103354E+01 + 0.3495871726340889E+01 + 0.3497426306926402E+01 + 0.3498980901825799E+01 + 0.3500535511000000E+01 + 0.3502090134405213E+01 + 0.3503644771978765E+01 + 0.3505199423653268E+01 + 0.3506754089371901E+01 + 0.3508308769200709E+01 + 0.3509863463285006E+01 + 0.3511418171769319E+01 + 0.3512972894671588E+01 + 0.3514527631813533E+01 + 0.3516082383000000E+01 + 0.3517637148093022E+01 + 0.3519191927183398E+01 + 0.3520746720419111E+01 + 0.3522301527937244E+01 + 0.3523856349748143E+01 + 0.3525411185780378E+01 + 0.3526966035961495E+01 + 0.3528520900239019E+01 + 0.3530075778591464E+01 + 0.3531630671000000E+01 + 0.3533185577446624E+01 + 0.3534740497916608E+01 + 0.3536295432396045E+01 + 0.3537850380875392E+01 + 0.3539405343395830E+01 + 0.3540960320031271E+01 + 0.3542515310854956E+01 + 0.3544070315867402E+01 + 0.3545625334956388E+01 + 0.3547180368000000E+01 + 0.3548735414911507E+01 + 0.3550290475744932E+01 + 0.3551845550589482E+01 + 0.3553400639526360E+01 + 0.3554955742543696E+01 + 0.3556510859569571E+01 + 0.3558065990531766E+01 + 0.3559621135400055E+01 + 0.3561176294209310E+01 + 0.3562731467000000E+01 + 0.3564286653791025E+01 + 0.3565841854514994E+01 + 0.3567397069082949E+01 + 0.3568952297417896E+01 + 0.3570507539581958E+01 + 0.3572062795727011E+01 + 0.3573618066004239E+01 + 0.3575173350433759E+01 + 0.3576728648832522E+01 + 0.3578283961000000E+01 + 0.3579839286796210E+01 + 0.3581394626323342E+01 + 0.3582949979744132E+01 + 0.3584505347207032E+01 + 0.3586060728694509E+01 + 0.3587616124081940E+01 + 0.3589171533243813E+01 + 0.3590726956108436E+01 + 0.3592282392687533E+01 + 0.3593837843000002E+01 + 0.3595393307070060E+01 + 0.3596948784943201E+01 + 0.3598504276670232E+01 + 0.3600059782296485E+01 + 0.3601615301803598E+01 + 0.3603170835132122E+01 + 0.3604726382222460E+01 + 0.3606281943047565E+01 + 0.3607837517630833E+01 + 0.3609393106000000E+01 + 0.3610948708169711E+01 + 0.3612504324102251E+01 + 0.3614059953746813E+01 + 0.3615615597055764E+01 + 0.3617171254018385E+01 + 0.3618726924647768E+01 + 0.3620282608957304E+01 + 0.3621838306954214E+01 + 0.3623394018636166E+01 + 0.3624949744000001E+01 + 0.3626505483042946E+01 + 0.3628061235763753E+01 + 0.3629617002161552E+01 + 0.3631172782235846E+01 + 0.3632728575990441E+01 + 0.3634284383431920E+01 + 0.3635840204566708E+01 + 0.3637396039389283E+01 + 0.3638951887875594E+01 + 0.3640507750000000E+01 + 0.3642063625730120E+01 + 0.3643619515006637E+01 + 0.3645175417763499E+01 + 0.3646731333944226E+01 + 0.3648287263603660E+01 + 0.3649843206868459E+01 + 0.3651399163864941E+01 + 0.3652955134627117E+01 + 0.3654511119045927E+01 + 0.3656067117000001E+01 + 0.3657623128393801E+01 + 0.3659179153235115E+01 + 0.3660735191557565E+01 + 0.3662291243392462E+01 + 0.3663847308744291E+01 + 0.3665403387600232E+01 + 0.3666959479947369E+01 + 0.3668515585784617E+01 + 0.3670071705129220E+01 + 0.3671627838000000E+01 + 0.3673183984402280E+01 + 0.3674740144287382E+01 + 0.3676296317593132E+01 + 0.3677852504263775E+01 + 0.3679408704318220E+01 + 0.3680964917823548E+01 + 0.3682521144846927E+01 + 0.3684077385412851E+01 + 0.3685633639479659E+01 + 0.3687189907000001E+01 + 0.3688746187927671E+01 + 0.3690302482221043E+01 + 0.3691858789839638E+01 + 0.3693415110747308E+01 + 0.3694971444958283E+01 + 0.3696527792519296E+01 + 0.3698084153477407E+01 + 0.3699640527867131E+01 + 0.3701196915703532E+01 + 0.3702753317000000E+01 + 0.3704309731750889E+01 + 0.3705866159874403E+01 + 0.3707422601269708E+01 + 0.3708979055844204E+01 + 0.3710535523601039E+01 + 0.3712092004605126E+01 + 0.3713648498921996E+01 + 0.3715205006592409E+01 + 0.3716761527618725E+01 + 0.3718318062000001E+01 + 0.3719874609725088E+01 + 0.3721431170742019E+01 + 0.3722987744988619E+01 + 0.3724544332410114E+01 + 0.3726100933037730E+01 + 0.3727657546958180E+01 + 0.3729214174257783E+01 + 0.3730770814943587E+01 + 0.3732327468899785E+01 + 0.3733884136000000E+01 + 0.3735440816154564E+01 + 0.3736997509420639E+01 + 0.3738554215892096E+01 + 0.3740110935653866E+01 + 0.3741667668686990E+01 + 0.3743224414905482E+01 + 0.3744781174223347E+01 + 0.3746337946621126E+01 + 0.3747894732182496E+01 + 0.3749451531000001E+01 + 0.3751008343130583E+01 + 0.3752565168488764E+01 + 0.3754122006953466E+01 + 0.3755678858412934E+01 + 0.3757235722863832E+01 + 0.3758792600372770E+01 + 0.3760349491007184E+01 + 0.3761906394813833E+01 + 0.3763463311807449E+01 + 0.3765020242000000E+01 + 0.3766577185382187E+01 + 0.3768134141859619E+01 + 0.3769691111316635E+01 + 0.3771248093649538E+01 + 0.3772805088893755E+01 + 0.3774362097174469E+01 + 0.3775919118617162E+01 + 0.3777476153275566E+01 + 0.3779033201092195E+01 + 0.3780590262000001E+01 + 0.3782147335939693E+01 + 0.3783704422883034E+01 + 0.3785261522809550E+01 + 0.3786818635699134E+01 + 0.3788375761535939E+01 + 0.3789932900306868E+01 + 0.3791490051999400E+01 + 0.3793047216632763E+01 + 0.3794604394275404E+01 + 0.3796161585000000E+01 + 0.3797718788847841E+01 + 0.3799276005734652E+01 + 0.3800833235544772E+01 + 0.3802390478171507E+01 + 0.3803947733612436E+01 + 0.3805505001932411E+01 + 0.3807062283197084E+01 + 0.3808619577452771E+01 + 0.3810176884715819E+01 + 0.3811734205000001E+01 + 0.3813291538296613E+01 + 0.3814848884507073E+01 + 0.3816406243510328E+01 + 0.3817963615198534E+01 + 0.3819520999617412E+01 + 0.3821078396911753E+01 + 0.3822635807226230E+01 + 0.3824193230599153E+01 + 0.3825750666903984E+01 + 0.3827308116000000E+01 + 0.3828865577785341E+01 + 0.3830423052313589E+01 + 0.3831980539677188E+01 + 0.3833538039960708E+01 + 0.3835095553157149E+01 + 0.3836653079200443E+01 + 0.3838210618024036E+01 + 0.3839768169591307E+01 + 0.3841325733912038E+01 + 0.3842883311000001E+01 + 0.3844440900868666E+01 + 0.3845998503530299E+01 + 0.3847556118996868E+01 + 0.3849113747276703E+01 + 0.3850671388335884E+01 + 0.3852229042113228E+01 + 0.3853786708547930E+01 + 0.3855344387628888E+01 + 0.3856902079422052E+01 + 0.3858459784000000E+01 + 0.3860017501412100E+01 + 0.3861575231614889E+01 + 0.3863132974541696E+01 + 0.3864690730130727E+01 + 0.3866248498376894E+01 + 0.3867806279311698E+01 + 0.3869364072966669E+01 + 0.3870921879338568E+01 + 0.3872479698370267E+01 + 0.3874037530000000E+01 + 0.3875595374185123E+01 + 0.3877153230959464E+01 + 0.3878711100375974E+01 + 0.3880268982485578E+01 + 0.3881826877315675E+01 + 0.3883384784878486E+01 + 0.3884942705185284E+01 + 0.3886500638205564E+01 + 0.3888058583844077E+01 + 0.3889616542000000E+01 + 0.3891174512600537E+01 + 0.3892732495684980E+01 + 0.3894290491320648E+01 + 0.3895848499571216E+01 + 0.3897406520458009E+01 + 0.3898964553975036E+01 + 0.3900522600115633E+01 + 0.3902080658860144E+01 + 0.3903638730168774E+01 + 0.3905196814000000E+01 + 0.3906754910320976E+01 + 0.3908313019133569E+01 + 0.3909871140448330E+01 + 0.3911429274275254E+01 + 0.3912987420617895E+01 + 0.3914545579475652E+01 + 0.3916103750847809E+01 + 0.3917661934730987E+01 + 0.3919220131117672E+01 + 0.3920778340000000E+01 + 0.3922336561376770E+01 + 0.3923894795273453E+01 + 0.3925453041722189E+01 + 0.3927011300747569E+01 + 0.3928569572286450E+01 + 0.3930127856219087E+01 + 0.3931686152426320E+01 + 0.3933244460880579E+01 + 0.3934802781696267E+01 + 0.3936361115000000E+01 + 0.3937919460886996E+01 + 0.3939477819326878E+01 + 0.3941036190257875E+01 + 0.3942594573619214E+01 + 0.3944152969361746E+01 + 0.3945711377443821E+01 + 0.3947269797824577E+01 + 0.3948828230502929E+01 + 0.3950386675539446E+01 + 0.3951945133000000E+01 + 0.3953503602929492E+01 + 0.3955062085288928E+01 + 0.3956620580018343E+01 + 0.3958179087061323E+01 + 0.3959737606402764E+01 + 0.3961296138054215E+01 + 0.3962854682027670E+01 + 0.3964413238335123E+01 + 0.3965971806988568E+01 + 0.3967530388000000E+01 + 0.3969088981369422E+01 + 0.3970647587048850E+01 + 0.3972206204978315E+01 + 0.3973764835104056E+01 + 0.3975323477444578E+01 + 0.3976882132065004E+01 + 0.3978440799030570E+01 + 0.3979999478366689E+01 + 0.3981558170037041E+01 + 0.3983116874000000E+01 + 0.3984675590210644E+01 + 0.3986234318610878E+01 + 0.3987793059139311E+01 + 0.3989351811743767E+01 + 0.3990910576479180E+01 + 0.3992469353469582E+01 + 0.3994028142838679E+01 + 0.3995586944621080E+01 + 0.3997145758713307E+01 + 0.3998704585000000E+01 + 0.4000263423387071E+01 + 0.4001822273865495E+01 + 0.4003381136447519E+01 + 0.4004940011148064E+01 + 0.4006498898013121E+01 + 0.4008057797108731E+01 + 0.4009616708500144E+01 + 0.4011175632185159E+01 + 0.4012734568057025E+01 + 0.4014293516000000E+01 + 0.4015852475929732E+01 + 0.4017411447887428E+01 + 0.4018970431945686E+01 + 0.4020529428172894E+01 + 0.4022088436588505E+01 + 0.4023647457180391E+01 + 0.4025206489935846E+01 + 0.4026765534838703E+01 + 0.4028324591867421E+01 + 0.4029883661000000E+01 + 0.4031442742207881E+01 + 0.4033001835436273E+01 + 0.4034560940623828E+01 + 0.4036120057717430E+01 + 0.4037679186759692E+01 + 0.4039238327854974E+01 + 0.4040797481107799E+01 + 0.4042356646570232E+01 + 0.4043915824213040E+01 + 0.4045475014000000E+01 + 0.4047034215880509E+01 + 0.4048593429746452E+01 + 0.4050152655475334E+01 + 0.4051711892960697E+01 + 0.4053271142282481E+01 + 0.4054830403640877E+01 + 0.4056389677235602E+01 + 0.4057948963117298E+01 + 0.4059508261105531E+01 + 0.4061067571000000E+01 + 0.4062626892652615E+01 + 0.4064186226124185E+01 + 0.4065745571527732E+01 + 0.4067304928966268E+01 + 0.4068864298426368E+01 + 0.4070423679819482E+01 + 0.4071983073056886E+01 + 0.4073542478114288E+01 + 0.4075101895067268E+01 + 0.4076661324000000E+01 + 0.4078220764968481E+01 + 0.4079780217915994E+01 + 0.4081339682757646E+01 + 0.4082899159417348E+01 + 0.4084458647921366E+01 + 0.4086018148362000E+01 + 0.4087577660831293E+01 + 0.4089137185339767E+01 + 0.4090696721771574E+01 + 0.4092256270000000E+01 + 0.4093815829934357E+01 + 0.4095375401628078E+01 + 0.4096934985170620E+01 + 0.4098494580643612E+01 + 0.4100054188037645E+01 + 0.4101613807284574E+01 + 0.4103173438315856E+01 + 0.4104733081097821E+01 + 0.4106292735650857E+01 + 0.4107852402000000E+01 + 0.4109412080160944E+01 + 0.4110971770112011E+01 + 0.4112531471822174E+01 + 0.4114091185266837E+01 + 0.4115650910496073E+01 + 0.4117210647608137E+01 + 0.4118770396700220E+01 + 0.4120330157757566E+01 + 0.4121889930591895E+01 + 0.4123449715000000E+01 + 0.4125009510850501E+01 + 0.4126569318299342E+01 + 0.4128129137574292E+01 + 0.4129688968880917E+01 + 0.4131248812166652E+01 + 0.4132808667212398E+01 + 0.4134368533798720E+01 + 0.4135928411852706E+01 + 0.4137488301528554E+01 + 0.4139048203000000E+01 + 0.4140608116386980E+01 + 0.4142168041594230E+01 + 0.4143727978472680E+01 + 0.4145287926885493E+01 + 0.4146847886837968E+01 + 0.4148407858427105E+01 + 0.4149967841750316E+01 + 0.4151527836837757E+01 + 0.4153087843615338E+01 + 0.4154647862000000E+01 + 0.4156207891934478E+01 + 0.4157767933464680E+01 + 0.4159327986662306E+01 + 0.4160888051593452E+01 + 0.4162448128259094E+01 + 0.4164008216618188E+01 + 0.4165568316628836E+01 + 0.4167128428239887E+01 + 0.4168688551385851E+01 + 0.4170248686000000E+01 + 0.4171808832051174E+01 + 0.4173368989650453E+01 + 0.4174929158944479E+01 + 0.4176489340062981E+01 + 0.4178049532939076E+01 + 0.4179609737379036E+01 + 0.4181169953189158E+01 + 0.4182730180304102E+01 + 0.4184290418857473E+01 + 0.4185850669000000E+01 + 0.4187410930843440E+01 + 0.4188971204343702E+01 + 0.4190531489417731E+01 + 0.4192091785987535E+01 + 0.4193652094033998E+01 + 0.4195212413575981E+01 + 0.4196772744632895E+01 + 0.4198333087218801E+01 + 0.4199893441339481E+01 + 0.4201453807000000E+01 + 0.4203014184197957E+01 + 0.4204574572901055E+01 + 0.4206134973069522E+01 + 0.4207695384665163E+01 + 0.4209255807668016E+01 + 0.4210816242069899E+01 + 0.4212376687863310E+01 + 0.4213937145070281E+01 + 0.4215497613758601E+01 + 0.4217058094000000E+01 + 0.4218618585834762E+01 + 0.4220179089177409E+01 + 0.4221739603911016E+01 + 0.4223300129927988E+01 + 0.4224860667229167E+01 + 0.4226421215885345E+01 + 0.4227981775967984E+01 + 0.4229542347518589E+01 + 0.4231102930532236E+01 + 0.4232663525000000E+01 + 0.4234224130908406E+01 + 0.4235784748225732E+01 + 0.4237345376915696E+01 + 0.4238906016943417E+01 + 0.4240466668290271E+01 + 0.4242027330948132E+01 + 0.4243588004909511E+01 + 0.4245148690195093E+01 + 0.4246709386869221E+01 + 0.4248270095000000E+01 + 0.4249830814627103E+01 + 0.4251391545676508E+01 + 0.4252952288045766E+01 + 0.4254513041638361E+01 + 0.4256073806426747E+01 + 0.4257634582427875E+01 + 0.4259195369659526E+01 + 0.4260756168144658E+01 + 0.4262316977914258E+01 + 0.4263877799000001E+01 + 0.4265438631431220E+01 + 0.4266999475227857E+01 + 0.4268560330407514E+01 + 0.4270121196981877E+01 + 0.4271682074893937E+01 + 0.4273242964042364E+01 + 0.4274803864326127E+01 + 0.4276364775706699E+01 + 0.4277925698242429E+01 + 0.4279486632000000E+01 + 0.4281047577034538E+01 + 0.4282608533354939E+01 + 0.4284169500958546E+01 + 0.4285730479840063E+01 + 0.4287291469963545E+01 + 0.4288852471273275E+01 + 0.4290413483713953E+01 + 0.4291974507275052E+01 + 0.4293535542015452E+01 + 0.4295096588000001E+01 + 0.4296657645275847E+01 + 0.4298218713819343E+01 + 0.4299779793589145E+01 + 0.4301340884542912E+01 + 0.4302901986626755E+01 + 0.4304463099779336E+01 + 0.4306024223940340E+01 + 0.4307585359118592E+01 + 0.4309146505430078E+01 + 0.4310707663000000E+01 + 0.4312268831913471E+01 + 0.4313830012095233E+01 + 0.4315391203429939E+01 + 0.4316952405808534E+01 + 0.4318513619195189E+01 + 0.4320074843601308E+01 + 0.4321636079039420E+01 + 0.4323197325542198E+01 + 0.4324758583173533E+01 + 0.4326319852000001E+01 + 0.4327881132057668E+01 + 0.4329442423260542E+01 + 0.4331003725492121E+01 + 0.4332565038645377E+01 + 0.4334126362723476E+01 + 0.4335687697800673E+01 + 0.4337249043951798E+01 + 0.4338810401215127E+01 + 0.4340371769572279E+01 + 0.4341933149000000E+01 + 0.4343494539481840E+01 + 0.4345055941028575E+01 + 0.4346617353657787E+01 + 0.4348178777383860E+01 + 0.4349740212184072E+01 + 0.4351301658011751E+01 + 0.4352863114820177E+01 + 0.4354424582583275E+01 + 0.4355986061306985E+01 + 0.4357547551000001E+01 + 0.4359109051671614E+01 + 0.4360670563333522E+01 + 0.4362232085998021E+01 + 0.4363793619673944E+01 + 0.4365355164329833E+01 + 0.4366916719908244E+01 + 0.4368478286352004E+01 + 0.4370039863646575E+01 + 0.4371601451843499E+01 + 0.4373163051000000E+01 + 0.4374724661162263E+01 + 0.4376286282332309E+01 + 0.4377847914501120E+01 + 0.4379409557659075E+01 + 0.4380971211789595E+01 + 0.4382532876871606E+01 + 0.4384094552883671E+01 + 0.4385656239786853E+01 + 0.4387217937515093E+01 + 0.4388779646000001E+01 + 0.4390341365206700E+01 + 0.4391903095234387E+01 + 0.4393464836215776E+01 + 0.4395026588270190E+01 + 0.4396588351361275E+01 + 0.4398150125352243E+01 + 0.4399711910106085E+01 + 0.4401273705573051E+01 + 0.4402835511838644E+01 + 0.4404397329000000E+01 + 0.4405959157123386E+01 + 0.4407520996151589E+01 + 0.4409082845996527E+01 + 0.4410644706579070E+01 + 0.4412206577924151E+01 + 0.4413768460123844E+01 + 0.4415330353270009E+01 + 0.4416892257374549E+01 + 0.4418454172325442E+01 + 0.4420016098000001E+01 + 0.4421578034308245E+01 + 0.4423139981291020E+01 + 0.4424701939021874E+01 + 0.4426263907570255E+01 + 0.4427825886957927E+01 + 0.4429387877175891E+01 + 0.4430949878214477E+01 + 0.4432511890054384E+01 + 0.4434073912661392E+01 + 0.4435635946000000E+01 + 0.4437197990038874E+01 + 0.4438760044763370E+01 + 0.4440322110163010E+01 + 0.4441884186231659E+01 + 0.4443446273013630E+01 + 0.4445008370585788E+01 + 0.4446570479024214E+01 + 0.4448132598325525E+01 + 0.4449694728363171E+01 + 0.4451256869000001E+01 + 0.4452819020146256E+01 + 0.4454381181901734E+01 + 0.4455943354413620E+01 + 0.4457505537815528E+01 + 0.4459067732083334E+01 + 0.4460629937091139E+01 + 0.4462192152712382E+01 + 0.4463754378882268E+01 + 0.4465316615631745E+01 + 0.4466878863000000E+01 + 0.4468441121014828E+01 + 0.4470003389658471E+01 + 0.4471565668901785E+01 + 0.4473127958720884E+01 + 0.4474690259153047E+01 + 0.4476252570275017E+01 + 0.4477814892162983E+01 + 0.4479377224820598E+01 + 0.4480939568139087E+01 + 0.4482501922000001E+01 + 0.4484064286316697E+01 + 0.4485626661129763E+01 + 0.4487189046511595E+01 + 0.4488751442530562E+01 + 0.4490313849208231E+01 + 0.4491876266535973E+01 + 0.4493438694504494E+01 + 0.4495001133094592E+01 + 0.4496563582271717E+01 + 0.4498126042000000E+01 + 0.4499688512247984E+01 + 0.4501250993001869E+01 + 0.4502813484252266E+01 + 0.4504375985993877E+01 + 0.4505938498268940E+01 + 0.4507501021150367E+01 + 0.4509063554710371E+01 + 0.4510626098948676E+01 + 0.4512188653752651E+01 + 0.4513751219000001E+01 + 0.4515313794604105E+01 + 0.4516876380621050E+01 + 0.4518438977142600E+01 + 0.4520001584251901E+01 + 0.4521564201931908E+01 + 0.4523126830100942E+01 + 0.4524689468677233E+01 + 0.4526252117638278E+01 + 0.4527814777053444E+01 + 0.4529377447000000E+01 + 0.4530940127531618E+01 + 0.4532502818607577E+01 + 0.4534065520163561E+01 + 0.4535628232139318E+01 + 0.4537190954521850E+01 + 0.4538753687328650E+01 + 0.4540316430577561E+01 + 0.4541879184276914E+01 + 0.4543441948420288E+01 + 0.4545004723000000E+01 + 0.4546567508011769E+01 + 0.4548130303464930E+01 + 0.4549693109372225E+01 + 0.4551255925743630E+01 + 0.4552818752556957E+01 + 0.4554381589769276E+01 + 0.4555944437337565E+01 + 0.4557507295234225E+01 + 0.4559070163455578E+01 + 0.4560633042000000E+01 + 0.4562195930874433E+01 + 0.4563758830120086E+01 + 0.4565321739786736E+01 + 0.4566884659919952E+01 + 0.4568447590516350E+01 + 0.4570010531540978E+01 + 0.4571573482958138E+01 + 0.4573136444719410E+01 + 0.4574699416756645E+01 + 0.4576262399000000E+01 + 0.4577825391416749E+01 + 0.4579388394122631E+01 + 0.4580951407270510E+01 + 0.4582514430994952E+01 + 0.4584077465217852E+01 + 0.4585640509723899E+01 + 0.4587203564298268E+01 + 0.4588766628892476E+01 + 0.4590329703715876E+01 + 0.4591892789000000E+01 + 0.4593455884900705E+01 + 0.4595018991271137E+01 + 0.4596582107888764E+01 + 0.4598145234550570E+01 + 0.4599708371280362E+01 + 0.4601271518248294E+01 + 0.4602834675625002E+01 + 0.4604397843463931E+01 + 0.4605961021636875E+01 + 0.4607524210000000E+01 + 0.4609087408446570E+01 + 0.4610650617018226E+01 + 0.4612213835793712E+01 + 0.4613777064847427E+01 + 0.4615340304203329E+01 + 0.4616903553852835E+01 + 0.4618466813786613E+01 + 0.4620030083983071E+01 + 0.4621593364401610E+01 + 0.4623156655000000E+01 + 0.4624719955745723E+01 + 0.4626283266645120E+01 + 0.4627846587714244E+01 + 0.4629409918967273E+01 + 0.4630973260396542E+01 + 0.4632536611980301E+01 + 0.4634099973697145E+01 + 0.4635663345560436E+01 + 0.4637226727637424E+01 + 0.4638790120000000E+01 + 0.4640353522690810E+01 + 0.4641916935635526E+01 + 0.4643480358730583E+01 + 0.4645043791878438E+01 + 0.4646607235051549E+01 + 0.4648170688267546E+01 + 0.4649734151544879E+01 + 0.4651297624906321E+01 + 0.4652861108381345E+01 + 0.4654424602000000E+01 + 0.4655988105791232E+01 + 0.4657551619779568E+01 + 0.4659115143988434E+01 + 0.4660678678433987E+01 + 0.4662242223047895E+01 + 0.4663805777707319E+01 + 0.4665369342290186E+01 + 0.4666932916774910E+01 + 0.4668496501295660E+01 + 0.4670060096000000E+01 + 0.4671623700987151E+01 + 0.4673187316162942E+01 + 0.4674750941384857E+01 + 0.4676314576522280E+01 + 0.4677878221582962E+01 + 0.4679441876663910E+01 + 0.4681005541862464E+01 + 0.4682569217206341E+01 + 0.4684132902615344E+01 + 0.4685696598000000E+01 + 0.4687260303301980E+01 + 0.4688824018587543E+01 + 0.4690387743954093E+01 + 0.4691951479487408E+01 + 0.4693515225138033E+01 + 0.4695078980769274E+01 + 0.4696642746244646E+01 + 0.4698206521527419E+01 + 0.4699770306735474E+01 + 0.4701334102000000E+01 + 0.4702897907419882E+01 + 0.4704461722964826E+01 + 0.4706025548572242E+01 + 0.4707589384180516E+01 + 0.4709153229739383E+01 + 0.4710717085205894E+01 + 0.4712280950537933E+01 + 0.4713844825735870E+01 + 0.4715408710865929E+01 + 0.4716972606000000E+01 + 0.4718536511184204E+01 + 0.4720100426361576E+01 + 0.4721664351449380E+01 + 0.4723228286373759E+01 + 0.4724792231164067E+01 + 0.4726356185916247E+01 + 0.4727920150725867E+01 + 0.4729484125599410E+01 + 0.4731048110405280E+01 + 0.4732612105000000E+01 + 0.4734176109289482E+01 + 0.4735740123377187E+01 + 0.4737304147415970E+01 + 0.4738868181544026E+01 + 0.4740432225729176E+01 + 0.4741996279829319E+01 + 0.4743560343702022E+01 + 0.4745124417294781E+01 + 0.4746688500694480E+01 + 0.4748252594000000E+01 + 0.4749816697278811E+01 + 0.4751380810472739E+01 + 0.4752944933492207E+01 + 0.4754509066256869E+01 + 0.4756073208793747E+01 + 0.4757637361199126E+01 + 0.4759201523568996E+01 + 0.4760765695912076E+01 + 0.4762329878101808E+01 + 0.4763894070000000E+01 + 0.4765458271513380E+01 + 0.4767022482728354E+01 + 0.4768586703776245E+01 + 0.4770150934778779E+01 + 0.4771715175746060E+01 + 0.4773279426616177E+01 + 0.4774843687326160E+01 + 0.4776407957821266E+01 + 0.4777972238059508E+01 + 0.4779536528000000E+01 + 0.4781100827619449E+01 + 0.4782665136964918E+01 + 0.4784229456101068E+01 + 0.4785793785086610E+01 + 0.4787358123911136E+01 + 0.4788922472519644E+01 + 0.4790486830856711E+01 + 0.4792051198886200E+01 + 0.4793615576601857E+01 + 0.4795179964000000E+01 + 0.4796744361089306E+01 + 0.4798308767927886E+01 + 0.4799873184586213E+01 + 0.4801437611125538E+01 + 0.4803002047499949E+01 + 0.4804566493594398E+01 + 0.4806130949293831E+01 + 0.4807695414552288E+01 + 0.4809259889430897E+01 + 0.4810824374000000E+01 + 0.4812388868317690E+01 + 0.4813953372393052E+01 + 0.4815517886222921E+01 + 0.4817082409801442E+01 + 0.4818646943091459E+01 + 0.4820211486035625E+01 + 0.4821776038577059E+01 + 0.4823340600706871E+01 + 0.4824905172490553E+01 + 0.4826469754000000E+01 + 0.4828034345283804E+01 + 0.4829598946297378E+01 + 0.4831163556972832E+01 + 0.4832728177247491E+01 + 0.4834292807119271E+01 + 0.4835857446625175E+01 + 0.4837422095802118E+01 + 0.4838986754642422E+01 + 0.4840551423069296E+01 + 0.4842116101000000E+01 + 0.4843680788387473E+01 + 0.4845245485327332E+01 + 0.4846810191950866E+01 + 0.4848374908377037E+01 + 0.4849939634581448E+01 + 0.4851504370447215E+01 + 0.4853069115856762E+01 + 0.4854633870743188E+01 + 0.4856198635118134E+01 + 0.4857763409000000E+01 + 0.4859328192411589E+01 + 0.4860892985393323E+01 + 0.4862457787990025E+01 + 0.4864022600242547E+01 + 0.4865587422145508E+01 + 0.4867152253663702E+01 + 0.4868717094761256E+01 + 0.4870281945391802E+01 + 0.4871846805492723E+01 + 0.4873411675000000E+01 + 0.4874976553881917E+01 + 0.4876541442235943E+01 + 0.4878106340191850E+01 + 0.4879671247866526E+01 + 0.4881236165227125E+01 + 0.4882801092144193E+01 + 0.4884366028487915E+01 + 0.4885930974203117E+01 + 0.4887495929350321E+01 + 0.4889060894000000E+01 + 0.4890625868212742E+01 + 0.4892190852009601E+01 + 0.4893755845401740E+01 + 0.4895320848394090E+01 + 0.4896885860919071E+01 + 0.4898450882862321E+01 + 0.4900015914110184E+01 + 0.4901580954638090E+01 + 0.4903146004559563E+01 + 0.4904711064000001E+01 + 0.4906276133053495E+01 + 0.4907841211688896E+01 + 0.4909406299843745E+01 + 0.4910971397456814E+01 + 0.4912536504481164E+01 + 0.4914101620879077E+01 + 0.4915666746613530E+01 + 0.4917231881680205E+01 + 0.4918797026125455E+01 + 0.4920362180000000E+01 + 0.4921927343345552E+01 + 0.4923492516167815E+01 + 0.4925057698463482E+01 + 0.4926622890227563E+01 + 0.4928188091435431E+01 + 0.4929753302049790E+01 + 0.4931318522033307E+01 + 0.4932883751359337E+01 + 0.4934448990017791E+01 + 0.4936014238000001E+01 + 0.4937579495310776E+01 + 0.4939144762008811E+01 + 0.4940710038166276E+01 + 0.4942275323845947E+01 + 0.4943840619001425E+01 + 0.4945405923515878E+01 + 0.4946971237272493E+01 + 0.4948536560226263E+01 + 0.4950101892443477E+01 + 0.4951667234000000E+01 + 0.4953232584955143E+01 + 0.4954797945302012E+01 + 0.4956363315017163E+01 + 0.4957928694079191E+01 + 0.4959494082490441E+01 + 0.4961059480268573E+01 + 0.4962624887431097E+01 + 0.4964190303971026E+01 + 0.4965755729843402E+01 + 0.4967321165000001E+01 + 0.4968886609402801E+01 + 0.4970452063054576E+01 + 0.4972017525968303E+01 + 0.4973582998156136E+01 + 0.4975148479620667E+01 + 0.4976713970358318E+01 + 0.4978279470365441E+01 + 0.4979844979640400E+01 + 0.4981410498184671E+01 + 0.4982976026000000E+01 + 0.4984541563087293E+01 + 0.4986107109444088E+01 + 0.4987672665067085E+01 + 0.4989238229953707E+01 + 0.4990803804109860E+01 + 0.4992369387546914E+01 + 0.4993934980275999E+01 + 0.4995500582288240E+01 + 0.4997066193543757E+01 + 0.4998631814000001E+01 + 0.5000197443620972E+01 + 0.5001763082396850E+01 + 0.5003328730324364E+01 + 0.5004894387403152E+01 + 0.5006460053666667E+01 + 0.5008025729170184E+01 + 0.5009591413968638E+01 + 0.5011157108075152E+01 + 0.5012722811438031E+01 + 0.5014288524000000E+01 + 0.5015854245715245E+01 + 0.5017419976583761E+01 + 0.5018985716617003E+01 + 0.5020551465826420E+01 + 0.5022117224223474E+01 + 0.5023682991819627E+01 + 0.5025248768625916E+01 + 0.5026814554627912E+01 + 0.5028380349771708E+01 + 0.5029946154000001E+01 + 0.5031511967274329E+01 + 0.5033077789631599E+01 + 0.5034643621127558E+01 + 0.5036209461815020E+01 + 0.5037775311712676E+01 + 0.5039341170817207E+01 + 0.5040907039124691E+01 + 0.5042472916617395E+01 + 0.5044038803256163E+01 + 0.5045604699000000E+01 + 0.5047170603815687E+01 + 0.5048736517701120E+01 + 0.5050302440661976E+01 + 0.5051868372704549E+01 + 0.5053434313842385E+01 + 0.5055000264093705E+01 + 0.5056566223476206E+01 + 0.5058132191971599E+01 + 0.5059698169505819E+01 + 0.5061264156000001E+01 + 0.5062830151410950E+01 + 0.5064396155838156E+01 + 0.5065962169416782E+01 + 0.5067528192268510E+01 + 0.5069094224358334E+01 + 0.5070660265550159E+01 + 0.5072226315707620E+01 + 0.5073792374779446E+01 + 0.5075358442846253E+01 + 0.5076924520000000E+01 + 0.5078490606305980E+01 + 0.5080056701722799E+01 + 0.5081622806182395E+01 + 0.5083188919620966E+01 + 0.5084755042024290E+01 + 0.5086321173410126E+01 + 0.5087887313796620E+01 + 0.5089453463193256E+01 + 0.5091019621596084E+01 + 0.5092585789000001E+01 + 0.5094151965401106E+01 + 0.5095718150800319E+01 + 0.5097284345199765E+01 + 0.5098850548601297E+01 + 0.5100416761003599E+01 + 0.5101982982403309E+01 + 0.5103549212797126E+01 + 0.5105115452187242E+01 + 0.5106681700584382E+01 + 0.5108247958000000E+01 + 0.5109814224436572E+01 + 0.5111380499860652E+01 + 0.5112946784229817E+01 + 0.5114513077503547E+01 + 0.5116079379663530E+01 + 0.5117645690705771E+01 + 0.5119212010626895E+01 + 0.5120778339446192E+01 + 0.5122344677218079E+01 + 0.5123911024000001E+01 + 0.5125477379829154E+01 + 0.5127043744661768E+01 + 0.5128610118433832E+01 + 0.5130176501086300E+01 + 0.5131742892617895E+01 + 0.5133309293064605E+01 + 0.5134875702462307E+01 + 0.5136442120802786E+01 + 0.5138008548009494E+01 + 0.5139574984000000E+01 + 0.5141141428727466E+01 + 0.5142707882287407E+01 + 0.5144274344810929E+01 + 0.5145840816416830E+01 + 0.5147407297080919E+01 + 0.5148973786686748E+01 + 0.5150540285117160E+01 + 0.5152106792304938E+01 + 0.5153673308260270E+01 + 0.5155239833000001E+01 + 0.5156806366546602E+01 + 0.5158372908945052E+01 + 0.5159939460245959E+01 + 0.5161506020494606E+01 + 0.5163072589674338E+01 + 0.5164639167728547E+01 + 0.5166205754600413E+01 + 0.5167772350260436E+01 + 0.5169338954721468E+01 + 0.5170905568000000E+01 + 0.5172472190108328E+01 + 0.5174038821041955E+01 + 0.5175605460792182E+01 + 0.5177172109351649E+01 + 0.5178738766728483E+01 + 0.5180305432940809E+01 + 0.5181872108006409E+01 + 0.5183438791912410E+01 + 0.5185005484598430E+01 + 0.5186572186000001E+01 + 0.5188138896076327E+01 + 0.5189705614881320E+01 + 0.5191272342492565E+01 + 0.5192839078979673E+01 + 0.5194405824319569E+01 + 0.5195972578429375E+01 + 0.5197539341226330E+01 + 0.5199106112694254E+01 + 0.5200672892920174E+01 + 0.5202239682000000E+01 + 0.5203806479990694E+01 + 0.5205373286793445E+01 + 0.5206940102270500E+01 + 0.5208506926297385E+01 + 0.5210073758903967E+01 + 0.5211640600219693E+01 + 0.5213207450374472E+01 + 0.5214774309426446E+01 + 0.5216341177322512E+01 + 0.5217908054000001E+01 + 0.5219474939399613E+01 + 0.5221041833475554E+01 + 0.5222608736185403E+01 + 0.5224175647492308E+01 + 0.5225742567424159E+01 + 0.5227309496050616E+01 + 0.5228876433441124E+01 + 0.5230443379610554E+01 + 0.5232010334489179E+01 + 0.5233577298000000E+01 + 0.5235144270091457E+01 + 0.5236711250813757E+01 + 0.5238278240242551E+01 + 0.5239845238446612E+01 + 0.5241412245414774E+01 + 0.5242979261084299E+01 + 0.5244546285392086E+01 + 0.5246113318304785E+01 + 0.5247680359835176E+01 + 0.5249247410000000E+01 + 0.5250814468812648E+01 + 0.5252381536273097E+01 + 0.5253948612377974E+01 + 0.5255515697123911E+01 + 0.5257082790507613E+01 + 0.5258649892525834E+01 + 0.5260217003175451E+01 + 0.5261784122460597E+01 + 0.5263351250396662E+01 + 0.5264918387000000E+01 + 0.5266485532273880E+01 + 0.5268052686169211E+01 + 0.5269619848623817E+01 + 0.5271187019582065E+01 + 0.5272754199064404E+01 + 0.5274321387140373E+01 + 0.5275888583879539E+01 + 0.5277455789304211E+01 + 0.5279023003363447E+01 + 0.5280590226000000E+01 + 0.5282157457165607E+01 + 0.5283724696847908E+01 + 0.5285291945043528E+01 + 0.5286859201752752E+01 + 0.5288426467018419E+01 + 0.5289993740910824E+01 + 0.5291561023499559E+01 + 0.5293128314784439E+01 + 0.5294695614657131E+01 + 0.5296262923000000E+01 + 0.5297830239727647E+01 + 0.5299397564883626E+01 + 0.5300964898543728E+01 + 0.5302532240778840E+01 + 0.5304099591602829E+01 + 0.5305666950992782E+01 + 0.5307234318925429E+01 + 0.5308801695393000E+01 + 0.5310369080411751E+01 + 0.5311936474000000E+01 + 0.5313503876164726E+01 + 0.5315071286867515E+01 + 0.5316638706058611E+01 + 0.5318206133691639E+01 + 0.5319773569759525E+01 + 0.5321341014280553E+01 + 0.5322908467273162E+01 + 0.5324475928739568E+01 + 0.5326043398656872E+01 + 0.5327610877000000E+01 + 0.5329178363761659E+01 + 0.5330745859005645E+01 + 0.5332313362813522E+01 + 0.5333880875255961E+01 + 0.5335448396276886E+01 + 0.5337015925738453E+01 + 0.5338583463503247E+01 + 0.5340151009541435E+01 + 0.5341718563989933E+01 + 0.5343286127000000E+01 + 0.5344853698674052E+01 + 0.5346421278919097E+01 + 0.5347988867593302E+01 + 0.5349556464566381E+01 + 0.5351124069842334E+01 + 0.5352691683511811E+01 + 0.5354259305665922E+01 + 0.5355826936337800E+01 + 0.5357394575470660E+01 + 0.5358962223000000E+01 + 0.5360529878872714E+01 + 0.5362097543081344E+01 + 0.5363665215629847E+01 + 0.5365232896524380E+01 + 0.5366800585796799E+01 + 0.5368368283495522E+01 + 0.5369935989668723E+01 + 0.5371503704332926E+01 + 0.5373071427455600E+01 + 0.5374639159000000E+01 + 0.5376206898924885E+01 + 0.5377774647171042E+01 + 0.5379342403674756E+01 + 0.5380910168381871E+01 + 0.5382477941349182E+01 + 0.5384045722705080E+01 + 0.5385613512577550E+01 + 0.5387181310998186E+01 + 0.5388749117849215E+01 + 0.5390316933000000E+01 + 0.5391884756353178E+01 + 0.5393452587944421E+01 + 0.5395020427842669E+01 + 0.5396588276114290E+01 + 0.5398156132795764E+01 + 0.5399723997904289E+01 + 0.5401291871455790E+01 + 0.5402859753409413E+01 + 0.5404427643636296E+01 + 0.5405995542000000E+01 + 0.5407563448420980E+01 + 0.5409131363047210E+01 + 0.5410699286083561E+01 + 0.5412267217715044E+01 + 0.5413835157895971E+01 + 0.5415403106431799E+01 + 0.5416971063127321E+01 + 0.5418539027896319E+01 + 0.5420107000821471E+01 + 0.5421674982000000E+01 + 0.5423242971507939E+01 + 0.5424810969336622E+01 + 0.5426378975456209E+01 + 0.5427946989839418E+01 + 0.5429515012488833E+01 + 0.5431083043426287E+01 + 0.5432651082673443E+01 + 0.5434219130221977E+01 + 0.5435787186017092E+01 + 0.5437355250000000E+01 + 0.5438923322130211E+01 + 0.5440491402440429E+01 + 0.5442059490981658E+01 + 0.5443627587803216E+01 + 0.5445195692934761E+01 + 0.5446763806393276E+01 + 0.5448331928194707E+01 + 0.5449900058305039E+01 + 0.5451468196612836E+01 + 0.5453036343000000E+01 + 0.5454604497390054E+01 + 0.5456172659872996E+01 + 0.5457740830580438E+01 + 0.5459309009633334E+01 + 0.5460877197028643E+01 + 0.5462445392683330E+01 + 0.5464013596513814E+01 + 0.5465581808484012E+01 + 0.5467150028631453E+01 + 0.5468718257000000E+01 + 0.5470286493611030E+01 + 0.5471854738395944E+01 + 0.5473422991263661E+01 + 0.5474991252135416E+01 + 0.5476559521075719E+01 + 0.5478127798241506E+01 + 0.5479696083788920E+01 + 0.5481264377734376E+01 + 0.5482832679877675E+01 + 0.5484400990000000E+01 + 0.5485969307957457E+01 + 0.5487537633905935E+01 + 0.5489105968076256E+01 + 0.5490674310677056E+01 + 0.5492242661659045E+01 + 0.5493811020806521E+01 + 0.5495379387903333E+01 + 0.5496947762872413E+01 + 0.5498516145852279E+01 + 0.5500084537000000E+01 + 0.5501652936432166E+01 + 0.5503221344103462E+01 + 0.5504789759928094E+01 + 0.5506358183825703E+01 + 0.5507926615779004E+01 + 0.5509495055811421E+01 + 0.5511063503946844E+01 + 0.5512631960196300E+01 + 0.5514200424550892E+01 + 0.5515768897000000E+01 + 0.5517337377537843E+01 + 0.5518905866177948E+01 + 0.5520474362938671E+01 + 0.5522042867834363E+01 + 0.5523611380832773E+01 + 0.5525179901871587E+01 + 0.5526748430888810E+01 + 0.5528316967871983E+01 + 0.5529885512885409E+01 + 0.5531454066000000E+01 + 0.5533022627265049E+01 + 0.5534591196643343E+01 + 0.5536159774076060E+01 + 0.5537728359507389E+01 + 0.5539296952916683E+01 + 0.5540865554305966E+01 + 0.5542434163677928E+01 + 0.5544002781052607E+01 + 0.5545571406476893E+01 + 0.5547140040000000E+01 + 0.5548708681656721E+01 + 0.5550277331424232E+01 + 0.5551845989265294E+01 + 0.5553414655141434E+01 + 0.5554983328999816E+01 + 0.5556552010778329E+01 + 0.5558120700415868E+01 + 0.5559689397920409E+01 + 0.5561258103407027E+01 + 0.5562826817000000E+01 + 0.5564395538784422E+01 + 0.5565964268688616E+01 + 0.5567533006601707E+01 + 0.5569101752418069E+01 + 0.5570670506092956E+01 + 0.5572239267620913E+01 + 0.5573808036997978E+01 + 0.5575376814270131E+01 + 0.5576945599560784E+01 + 0.5578514393000000E+01 + 0.5580083194664263E+01 + 0.5581652004415687E+01 + 0.5583220822062796E+01 + 0.5584789647430974E+01 + 0.5586358480541531E+01 + 0.5587927321542187E+01 + 0.5589496170581323E+01 + 0.5591065027720787E+01 + 0.5592633892888289E+01 + 0.5594202766000000E+01 + 0.5595771646989984E+01 + 0.5597340535863831E+01 + 0.5598909432645025E+01 + 0.5600478337355384E+01 + 0.5602047249997461E+01 + 0.5603616170561367E+01 + 0.5605185099037173E+01 + 0.5606754035424952E+01 + 0.5608322979740262E+01 + 0.5609891932000000E+01 + 0.5611460892208662E+01 + 0.5613029860321163E+01 + 0.5614598836280018E+01 + 0.5616167820033099E+01 + 0.5617736811590588E+01 + 0.5619305811002852E+01 + 0.5620874818320718E+01 + 0.5622443833581770E+01 + 0.5624012856803093E+01 + 0.5625581888000003E+01 + 0.5627150927166540E+01 + 0.5628719974211676E+01 + 0.5630289029023095E+01 + 0.5631858091499471E+01 + 0.5633427161667035E+01 + 0.5634996239634336E+01 + 0.5636565325510587E+01 + 0.5638134419363051E+01 + 0.5639703521193974E+01 + 0.5641272631000000E+01 + 0.5642841748762254E+01 + 0.5644410874399752E+01 + 0.5645980007815993E+01 + 0.5647549148922461E+01 + 0.5649118297723574E+01 + 0.5650687454283717E+01 + 0.5652256618667838E+01 + 0.5653825790915573E+01 + 0.5655394971027295E+01 + 0.5656964159000000E+01 + 0.5658533354822297E+01 + 0.5660102558449203E+01 + 0.5661671769827348E+01 + 0.5663240988908680E+01 + 0.5664810215707084E+01 + 0.5666379450276389E+01 + 0.5667948692670734E+01 + 0.5669517942923117E+01 + 0.5671087201033743E+01 + 0.5672656467000000E+01 + 0.5674225740812369E+01 + 0.5675795022433712E+01 + 0.5677364311819984E+01 + 0.5678933608930143E+01 + 0.5680502913758074E+01 + 0.5682072226320192E+01 + 0.5683641546633043E+01 + 0.5685210874698387E+01 + 0.5686780210495081E+01 + 0.5688349554000003E+01 + 0.5689918905206499E+01 + 0.5691488264173790E+01 + 0.5693057630977556E+01 + 0.5694627005683939E+01 + 0.5696196388248105E+01 + 0.5697765778553637E+01 + 0.5699335176484080E+01 + 0.5700904581992756E+01 + 0.5702473995141139E+01 + 0.5704043416000000E+01 + 0.5705612844627742E+01 + 0.5707182281033253E+01 + 0.5708751725213052E+01 + 0.5710321177161017E+01 + 0.5711890636840399E+01 + 0.5713460104194696E+01 + 0.5715029579167844E+01 + 0.5716599061750328E+01 + 0.5718168552004769E+01 + 0.5719738050000000E+01 + 0.5721307555783963E+01 + 0.5722877069321060E+01 + 0.5724446590554813E+01 + 0.5726016119431281E+01 + 0.5727585655926147E+01 + 0.5729155200034188E+01 + 0.5730724751751001E+01 + 0.5732294311102183E+01 + 0.5733863878159819E+01 + 0.5735433453000000E+01 + 0.5737003035663220E+01 + 0.5738572626047625E+01 + 0.5740142224015768E+01 + 0.5741711829444381E+01 + 0.5743281442375042E+01 + 0.5744851062955672E+01 + 0.5746420691334199E+01 + 0.5747990327552234E+01 + 0.5749559971486616E+01 + 0.5751129623000002E+01 + 0.5752699281990551E+01 + 0.5754268948498430E+01 + 0.5755838622599299E+01 + 0.5757408304364927E+01 + 0.5758977993821732E+01 + 0.5760547690966892E+01 + 0.5762117395796722E+01 + 0.5763687108285657E+01 + 0.5765256828374218E+01 + 0.5766826556000000E+01 + 0.5768396291126159E+01 + 0.5769966033818058E+01 + 0.5771535784166620E+01 + 0.5773105542251394E+01 + 0.5774675308019781E+01 + 0.5776245081333927E+01 + 0.5777814862056290E+01 + 0.5779384650153579E+01 + 0.5780954445754084E+01 + 0.5782524249000000E+01 + 0.5784094059992237E+01 + 0.5785663878666583E+01 + 0.5787233704917552E+01 + 0.5788803538650674E+01 + 0.5790373379899656E+01 + 0.5791943228780885E+01 + 0.5793513085410149E+01 + 0.5795082949784211E+01 + 0.5796652821715354E+01 + 0.5798222701000000E+01 + 0.5799792587503585E+01 + 0.5801362481367654E+01 + 0.5802932382802777E+01 + 0.5804502292001580E+01 + 0.5806072208948159E+01 + 0.5807642133492062E+01 + 0.5809212065482018E+01 + 0.5810782004851514E+01 + 0.5812351951665446E+01 + 0.5813921906000003E+01 + 0.5815491867920329E+01 + 0.5817061837447396E+01 + 0.5818631814591119E+01 + 0.5820201799355210E+01 + 0.5821771791671160E+01 + 0.5823341791423875E+01 + 0.5824911798498998E+01 + 0.5826481812873072E+01 + 0.5828051834663551E+01 + 0.5829621864000000E+01 + 0.5831191900977330E+01 + 0.5832761945551794E+01 + 0.5834331997644991E+01 + 0.5835902057183476E+01 + 0.5837472124151469E+01 + 0.5839042198570407E+01 + 0.5840612280462140E+01 + 0.5842182369836730E+01 + 0.5843752466685948E+01 + 0.5845322571000000E+01 + 0.5846892682773574E+01 + 0.5848462802019322E+01 + 0.5850032928754390E+01 + 0.5851603062992167E+01 + 0.5853173204702472E+01 + 0.5854743353826995E+01 + 0.5856313510307679E+01 + 0.5857883674128943E+01 + 0.5859453845341067E+01 + 0.5861024024000000E+01 + 0.5862594210151857E+01 + 0.5864164403803462E+01 + 0.5865734604951799E+01 + 0.5867304813591844E+01 + 0.5868875029695087E+01 + 0.5870445253217866E+01 + 0.5872015484116647E+01 + 0.5873585722370323E+01 + 0.5875155967992558E+01 + 0.5876726221000003E+01 + 0.5878296481402749E+01 + 0.5879866749184660E+01 + 0.5881437024323030E+01 + 0.5883007306799946E+01 + 0.5884577596653085E+01 + 0.5886147893956006E+01 + 0.5887718198781704E+01 + 0.5889288511134274E+01 + 0.5890858830911007E+01 + 0.5892429158000000E+01 + 0.5893999492316246E+01 + 0.5895569833882303E+01 + 0.5897140182747623E+01 + 0.5898710538962971E+01 + 0.5900280902594409E+01 + 0.5901851273717875E+01 + 0.5903421652407808E+01 + 0.5904992038639420E+01 + 0.5906562432234096E+01 + 0.5908132833000000E+01 + 0.5909703240811473E+01 + 0.5911273655807594E+01 + 0.5912844078193637E+01 + 0.5914414508157656E+01 + 0.5915984945687649E+01 + 0.5917555390642534E+01 + 0.5919125842880237E+01 + 0.5920696302327897E+01 + 0.5922266769019933E+01 + 0.5923837243000000E+01 + 0.5925407724299242E+01 + 0.5926978212898793E+01 + 0.5928548708767275E+01 + 0.5930119211878911E+01 + 0.5931689722272910E+01 + 0.5933260240030413E+01 + 0.5934830765231932E+01 + 0.5936401297878033E+01 + 0.5937971837845388E+01 + 0.5939542385000000E+01 + 0.5941112939251902E+01 + 0.5942683500687197E+01 + 0.5944254069436010E+01 + 0.5945824645618957E+01 + 0.5947395229246060E+01 + 0.5948965820256000E+01 + 0.5950536418586393E+01 + 0.5952107024182416E+01 + 0.5953677637000981E+01 + 0.5955248257000000E+01 + 0.5956818884155882E+01 + 0.5958389518518979E+01 + 0.5959960160158144E+01 + 0.5961530809135298E+01 + 0.5963101465431911E+01 + 0.5964672128977549E+01 + 0.5966242799701685E+01 + 0.5967813477580337E+01 + 0.5969384162661654E+01 + 0.5970954855000000E+01 + 0.5972525554643315E+01 + 0.5974096261613879E+01 + 0.5975666975927561E+01 + 0.5977237697593622E+01 + 0.5978808426544581E+01 + 0.5980379162663441E+01 + 0.5981949905833924E+01 + 0.5983520656032056E+01 + 0.5985091413376942E+01 + 0.5986662178000000E+01 + 0.5988232949996768E+01 + 0.5989803729319284E+01 + 0.5991374515883703E+01 + 0.5992945309612400E+01 + 0.5994516110499955E+01 + 0.5996086918587540E+01 + 0.5997657733916335E+01 + 0.5999228556480874E+01 + 0.6000799386203418E+01 + 0.6002370223000000E+01 + 0.6003941066822639E+01 + 0.6005511917767254E+01 + 0.6007082775965738E+01 + 0.6008653641537569E+01 + 0.6010224514457831E+01 + 0.6011795394608456E+01 + 0.6013366281870694E+01 + 0.6014937176178477E+01 + 0.6016508077547379E+01 + 0.6018078986000000E+01 + 0.6019649901560047E+01 + 0.6021220824255636E+01 + 0.6022791754115994E+01 + 0.6024362691170012E+01 + 0.6025933635442722E+01 + 0.6027504586956676E+01 + 0.6029075545733496E+01 + 0.6030646511742323E+01 + 0.6032217484870905E+01 + 0.6033788465000000E+01 + 0.6035359452051977E+01 + 0.6036930446115696E+01 + 0.6038501447321641E+01 + 0.6040072455789958E+01 + 0.6041643471520734E+01 + 0.6043214494436580E+01 + 0.6044785524459448E+01 + 0.6046356561548654E+01 + 0.6047927605721431E+01 + 0.6049498657000000E+01 + 0.6051069715401177E+01 + 0.6052640780920167E+01 + 0.6054211853546760E+01 + 0.6055782933272184E+01 + 0.6057354020104181E+01 + 0.6058925114061165E+01 + 0.6060496215161226E+01 + 0.6062067323391788E+01 + 0.6063638438692770E+01 + 0.6065209561000000E+01 + 0.6066780690272687E+01 + 0.6068351826563540E+01 + 0.6069922969948647E+01 + 0.6071494120496478E+01 + 0.6073065278186941E+01 + 0.6074636442942807E+01 + 0.6076207614686834E+01 + 0.6077778793398386E+01 + 0.6079349979144560E+01 + 0.6080921172000000E+01 + 0.6082492372017183E+01 + 0.6084063579159877E+01 + 0.6085634793369688E+01 + 0.6087206014590946E+01 + 0.6088777242799766E+01 + 0.6090348477992754E+01 + 0.6091919720167316E+01 + 0.6093490969348139E+01 + 0.6095062225602169E+01 + 0.6096633489000000E+01 + 0.6098204759580900E+01 + 0.6099776037258878E+01 + 0.6101347321916632E+01 + 0.6102918613446328E+01 + 0.6104489911850336E+01 + 0.6106061217202099E+01 + 0.6107632529575682E+01 + 0.6109203849010370E+01 + 0.6110775175491554E+01 + 0.6112346509000000E+01 + 0.6113917849520060E+01 + 0.6115489197050466E+01 + 0.6117060551593535E+01 + 0.6118631913151974E+01 + 0.6120203281732854E+01 + 0.6121774657346078E+01 + 0.6123346040001279E+01 + 0.6124917429688793E+01 + 0.6126488826369076E+01 + 0.6128060230000000E+01 + 0.6129631640545892E+01 + 0.6131203057996844E+01 + 0.6132774482349394E+01 + 0.6134345913603017E+01 + 0.6135917351791303E+01 + 0.6137488796969851E+01 + 0.6139060249193920E+01 + 0.6140631708476411E+01 + 0.6142203174764571E+01 + 0.6143774648000000E+01 + 0.6145346128136641E+01 + 0.6146917615177783E+01 + 0.6148489109139064E+01 + 0.6150060610035137E+01 + 0.6151632117869315E+01 + 0.6153203632637588E+01 + 0.6154775154335847E+01 + 0.6156346682961865E+01 + 0.6157918218516281E+01 + 0.6159489761000000E+01 + 0.6161061310413850E+01 + 0.6162632866758445E+01 + 0.6164204430034327E+01 + 0.6165776000241862E+01 + 0.6167347577379338E+01 + 0.6168919161443689E+01 + 0.6170490752431929E+01 + 0.6172062350346572E+01 + 0.6173633955198667E+01 + 0.6175205567000000E+01 + 0.6176777185753051E+01 + 0.6178348811423070E+01 + 0.6179920443965991E+01 + 0.6181492083340061E+01 + 0.6183063729530210E+01 + 0.6184635382538607E+01 + 0.6186207042367906E+01 + 0.6187778709032526E+01 + 0.6189350382565144E+01 + 0.6190922063000000E+01 + 0.6192493750369397E+01 + 0.6194065444697849E+01 + 0.6195637146007931E+01 + 0.6197208854314954E+01 + 0.6198780569549771E+01 + 0.6200352291588754E+01 + 0.6201924020309064E+01 + 0.6203495755690134E+01 + 0.6205067497869917E+01 + 0.6206639247000000E+01 + 0.6208211003180407E+01 + 0.6209782766304890E+01 + 0.6211354536215637E+01 + 0.6212926312770313E+01 + 0.6214498096006549E+01 + 0.6216069886078071E+01 + 0.6217641683138706E+01 + 0.6219213487232482E+01 + 0.6220785298233192E+01 + 0.6222357116000000E+01 + 0.6223928940429481E+01 + 0.6225500771567920E+01 + 0.6227072609499021E+01 + 0.6228644454300771E+01 + 0.6230216305984760E+01 + 0.6231788164519720E+01 + 0.6233360029874150E+01 + 0.6234931902044753E+01 + 0.6236503781071972E+01 + 0.6238075667000000E+01 + 0.6239647559841538E+01 + 0.6241219459483267E+01 + 0.6242791365780359E+01 + 0.6244363278605576E+01 + 0.6245935198035985E+01 + 0.6247507124280483E+01 + 0.6249079057547548E+01 + 0.6250650997888371E+01 + 0.6252222945110375E+01 + 0.6253794899000000E+01 + 0.6255366859405478E+01 + 0.6256938826422146E+01 + 0.6258510800207119E+01 + 0.6260082780905269E+01 + 0.6261654768519072E+01 + 0.6263226762959145E+01 + 0.6264798764135404E+01 + 0.6266370772007944E+01 + 0.6267942786614626E+01 + 0.6269514808000000E+01 + 0.6271086836186649E+01 + 0.6272658871109250E+01 + 0.6274230912680519E+01 + 0.6275802960824511E+01 + 0.6277375015597277E+01 + 0.6278947077140003E+01 + 0.6280519145593438E+01 + 0.6282091220986569E+01 + 0.6283663303175139E+01 + 0.6285235392000000E+01 + 0.6286807487356851E+01 + 0.6288379589360845E+01 + 0.6289951698181984E+01 + 0.6291523813972154E+01 + 0.6293095936672636E+01 + 0.6294668066088818E+01 + 0.6296240202025863E+01 + 0.6297812344410533E+01 + 0.6299384493358089E+01 + 0.6300956649000002E+01 + 0.6302528811444994E+01 + 0.6304100980710797E+01 + 0.6305673156792385E+01 + 0.6307245339679488E+01 + 0.6308817529300767E+01 + 0.6310389725545496E+01 + 0.6311961928303751E+01 + 0.6313534137553748E+01 + 0.6315106353410309E+01 + 0.6316678576000000E+01 + 0.6318250805416486E+01 + 0.6319823041621781E+01 + 0.6321395284544984E+01 + 0.6322967534118459E+01 + 0.6324539790312398E+01 + 0.6326112053121412E+01 + 0.6327684322541104E+01 + 0.6329256598602572E+01 + 0.6330828881391925E+01 + 0.6332401171000000E+01 + 0.6333973467469773E+01 + 0.6335545770652732E+01 + 0.6337118080352505E+01 + 0.6338690396392714E+01 + 0.6340262718829512E+01 + 0.6341835047869062E+01 + 0.6343407383717800E+01 + 0.6344979726448480E+01 + 0.6346552075926640E+01 + 0.6348124432000000E+01 + 0.6349696794554396E+01 + 0.6351269163628181E+01 + 0.6352841539297824E+01 + 0.6354413921636433E+01 + 0.6355986310678041E+01 + 0.6357558706431458E+01 + 0.6359131108904352E+01 + 0.6360703518060512E+01 + 0.6362275933795745E+01 + 0.6363848356000003E+01 + 0.6365420784599541E+01 + 0.6366993219665853E+01 + 0.6368565661306728E+01 + 0.6370138109624784E+01 + 0.6371710564662394E+01 + 0.6373283026423082E+01 + 0.6374855494908963E+01 + 0.6376427970076910E+01 + 0.6378000451813683E+01 + 0.6379572940000000E+01 + 0.6381145434561508E+01 + 0.6382717935603521E+01 + 0.6384290443276282E+01 + 0.6385862957714820E+01 + 0.6387435478877401E+01 + 0.6389008006608256E+01 + 0.6390580540751643E+01 + 0.6392153081268180E+01 + 0.6393725628298813E+01 + 0.6395298182000000E+01 + 0.6396870742478104E+01 + 0.6398443309639051E+01 + 0.6400015883338674E+01 + 0.6401588463444669E+01 + 0.6403161049962746E+01 + 0.6404733642987647E+01 + 0.6406306242614518E+01 + 0.6407878848873708E+01 + 0.6409451461695114E+01 + 0.6411024081000000E+01 + 0.6412596706732201E+01 + 0.6414169338925873E+01 + 0.6415741977637748E+01 + 0.6417314622922437E+01 + 0.6418887274809914E+01 + 0.6420459933314253E+01 + 0.6422032598448490E+01 + 0.6423605270179069E+01 + 0.6425177948400231E+01 + 0.6426750633000003E+01 + 0.6428323323903416E+01 + 0.6429896021183549E+01 + 0.6431468724950483E+01 + 0.6433041435308651E+01 + 0.6434614152296784E+01 + 0.6436186875911234E+01 + 0.6437759606147095E+01 + 0.6439332342966761E+01 + 0.6440905086281948E+01 + 0.6442477836000000E+01 + 0.6444050592052208E+01 + 0.6445623354465590E+01 + 0.6447196123291104E+01 + 0.6448768898579701E+01 + 0.6450341680382249E+01 + 0.6451914468749581E+01 + 0.6453487263731632E+01 + 0.6455060065325358E+01 + 0.6456632873445563E+01 + 0.6458205688000000E+01 + 0.6459778508910818E+01 + 0.6461351336157800E+01 + 0.6462924169735144E+01 + 0.6464497009643027E+01 + 0.6466069855951267E+01 + 0.6467642708774595E+01 + 0.6469215568226964E+01 + 0.6470788434330626E+01 + 0.6472361306965679E+01 + 0.6473934186000000E+01 + 0.6475507071338317E+01 + 0.6477079963032798E+01 + 0.6478652861172463E+01 + 0.6480225765838876E+01 + 0.6481798677026931E+01 + 0.6483371594675594E+01 + 0.6484944518723271E+01 + 0.6486517449130132E+01 + 0.6488090385890102E+01 + 0.6489663329000003E+01 + 0.6491236278469629E+01 + 0.6492809234360676E+01 + 0.6494382196747808E+01 + 0.6495955165695414E+01 + 0.6497528141148383E+01 + 0.6499101122974517E+01 + 0.6500674111041988E+01 + 0.6502247105318509E+01 + 0.6503820105926089E+01 + 0.6505393113000000E+01 + 0.6506966126639041E+01 + 0.6508539146796067E+01 + 0.6510112173387463E+01 + 0.6511685206335573E+01 + 0.6513258245632103E+01 + 0.6514831291313522E+01 + 0.6516404343416401E+01 + 0.6517977401939388E+01 + 0.6519550466822324E+01 + 0.6521123538000000E+01 + 0.6522696615428345E+01 + 0.6524269699147855E+01 + 0.6525842789220173E+01 + 0.6527415885702937E+01 + 0.6528988988607299E+01 + 0.6530562097914404E+01 + 0.6532135213605123E+01 + 0.6533708335673325E+01 + 0.6535281464133030E+01 + 0.6536854599000000E+01 + 0.6538427740280081E+01 + 0.6540000887939507E+01 + 0.6541574041934596E+01 + 0.6543147202223675E+01 + 0.6544720368788403E+01 + 0.6546293541625480E+01 + 0.6547866720732227E+01 + 0.6549439906127776E+01 + 0.6551013097865082E+01 + 0.6552586296000003E+01 + 0.6554159500569353E+01 + 0.6555732711533786E+01 + 0.6557305928834901E+01 + 0.6558879152417968E+01 + 0.6560452382270795E+01 + 0.6562025618408652E+01 + 0.6563598860847131E+01 + 0.6565172109594342E+01 + 0.6566745364646796E+01 + 0.6568318626000000E+01 + 0.6569891893650588E+01 + 0.6571465167599675E+01 + 0.6573038447849506E+01 + 0.6574611734401988E+01 + 0.6576185027255173E+01 + 0.6577758326404636E+01 + 0.6579331631846024E+01 + 0.6580904943582448E+01 + 0.6582478261628555E+01 + 0.6584051586000000E+01 + 0.6585624916700132E+01 + 0.6587198253683124E+01 + 0.6588771596890860E+01 + 0.6590344946270792E+01 + 0.6591918301835228E+01 + 0.6593491663638298E+01 + 0.6595065031734507E+01 + 0.6596638406158335E+01 + 0.6598211786913235E+01 + 0.6599785174000000E+01 + 0.6601358567409617E+01 + 0.6602931967093904E+01 + 0.6604505372994876E+01 + 0.6606078785060834E+01 + 0.6607652203313048E+01 + 0.6609225627819865E+01 + 0.6610799058649651E+01 + 0.6612372495824205E+01 + 0.6613945939293177E+01 + 0.6615519389000000E+01 + 0.6617092844896730E+01 + 0.6618666306969864E+01 + 0.6620239775214512E+01 + 0.6621813249629793E+01 + 0.6623386730261312E+01 + 0.6624960217184689E+01 + 0.6626533710474712E+01 + 0.6628107210127037E+01 + 0.6629680716014654E+01 + 0.6631254228000000E+01 + 0.6632827745993466E+01 + 0.6634401270097232E+01 + 0.6635974800461440E+01 + 0.6637548337221946E+01 + 0.6639121880348632E+01 + 0.6640695429704305E+01 + 0.6642268985151342E+01 + 0.6643842546633898E+01 + 0.6645416114222853E+01 + 0.6646989688000000E+01 + 0.6648563268029126E+01 + 0.6650136854302058E+01 + 0.6651710446792635E+01 + 0.6653284045477105E+01 + 0.6654857650359887E+01 + 0.6656431261463548E+01 + 0.6658004878810428E+01 + 0.6659578502390182E+01 + 0.6661152132141820E+01 + 0.6662725768000000E+01 + 0.6664299409923018E+01 + 0.6665873057963736E+01 + 0.6667446712198649E+01 + 0.6669020372696600E+01 + 0.6670594039437353E+01 + 0.6672167712343210E+01 + 0.6673741391336479E+01 + 0.6675315076396776E+01 + 0.6676888767592581E+01 + 0.6678462465000000E+01 + 0.6680036168671835E+01 + 0.6681609878567598E+01 + 0.6683183594623483E+01 + 0.6684757316779684E+01 + 0.6686331045022837E+01 + 0.6687904779369548E+01 + 0.6689478519836783E+01 + 0.6691052266433471E+01 + 0.6692626019156078E+01 + 0.6694199778000000E+01 + 0.6695773542961621E+01 + 0.6697347314041267E+01 + 0.6698921091240257E+01 + 0.6700494874559808E+01 + 0.6702068664000001E+01 + 0.6703642459560197E+01 + 0.6705216261239743E+01 + 0.6706790069038732E+01 + 0.6708363882958377E+01 + 0.6709937703000000E+01 + 0.6711511529163923E+01 + 0.6713085361446529E+01 + 0.6714659199843218E+01 + 0.6716233044350450E+01 + 0.6717806894977162E+01 + 0.6719380751740316E+01 + 0.6720954614656518E+01 + 0.6722528483712406E+01 + 0.6724102358848167E+01 + 0.6725676240000000E+01 + 0.6727250127127422E+01 + 0.6728824020283226E+01 + 0.6730397919543522E+01 + 0.6731971824976785E+01 + 0.6733545736562637E+01 + 0.6735119654223389E+01 + 0.6736693577881359E+01 + 0.6738267507516302E+01 + 0.6739841443197029E+01 + 0.6741415385000000E+01 + 0.6742989332978071E+01 + 0.6744563287089638E+01 + 0.6746137247269483E+01 + 0.6747711213456721E+01 + 0.6749285185640757E+01 + 0.6750859163843447E+01 + 0.6752433148086900E+01 + 0.6754007138375900E+01 + 0.6755581134688390E+01 + 0.6757155137000000E+01 + 0.6758729145302941E+01 + 0.6760303159655708E+01 + 0.6761877180133380E+01 + 0.6763451206801691E+01 + 0.6765025239617887E+01 + 0.6766599278469205E+01 + 0.6768173323242768E+01 + 0.6769747373888880E+01 + 0.6771321430455743E+01 + 0.6772895493000000E+01 + 0.6774469561577068E+01 + 0.6776043636237550E+01 + 0.6777617717030850E+01 + 0.6779191803999365E+01 + 0.6780765897104204E+01 + 0.6782339996254015E+01 + 0.6783914101357121E+01 + 0.6785488212354326E+01 + 0.6787062329236788E+01 + 0.6788636452000000E+01 + 0.6790210580658583E+01 + 0.6791784715303664E+01 + 0.6793358856045495E+01 + 0.6794933002983338E+01 + 0.6796507156088556E+01 + 0.6798081315250012E+01 + 0.6799655480355992E+01 + 0.6801229651342292E+01 + 0.6802803828218368E+01 + 0.6804378011000000E+01 + 0.6805952199708577E+01 + 0.6807526394387865E+01 + 0.6809100595087222E+01 + 0.6810674801851048E+01 + 0.6812249014665984E+01 + 0.6813823233481411E+01 + 0.6815397458246366E+01 + 0.6816971688926491E+01 + 0.6818545925513170E+01 + 0.6820120168000000E+01 + 0.6821694416394459E+01 + 0.6823268670759513E+01 + 0.6824842931172011E+01 + 0.6826417197698136E+01 + 0.6827991470280181E+01 + 0.6829565748780496E+01 + 0.6831140033061915E+01 + 0.6832714323096187E+01 + 0.6834288619023857E+01 + 0.6835862921000000E+01 + 0.6837437229127617E+01 + 0.6839011543301474E+01 + 0.6840585863364271E+01 + 0.6842160189173885E+01 + 0.6843734520764692E+01 + 0.6845308858284919E+01 + 0.6846883201883038E+01 + 0.6848457551607756E+01 + 0.6850031907353150E+01 + 0.6851606269000000E+01 + 0.6853180636449417E+01 + 0.6854755009683825E+01 + 0.6856329388705973E+01 + 0.6857903773523828E+01 + 0.6859478164205884E+01 + 0.6861052560859702E+01 + 0.6862626963592143E+01 + 0.6864201372428645E+01 + 0.6865775787268466E+01 + 0.6867350208000000E+01 + 0.6868924634532618E+01 + 0.6870499066859543E+01 + 0.6872073504994964E+01 + 0.6873647948955081E+01 + 0.6875222398779425E+01 + 0.6876796854522584E+01 + 0.6878371316238611E+01 + 0.6879945783934758E+01 + 0.6881520257545733E+01 + 0.6883094737000000E+01 + 0.6884669222249504E+01 + 0.6886243713340062E+01 + 0.6887818210340975E+01 + 0.6889392713315957E+01 + 0.6890967222263892E+01 + 0.6892541737141825E+01 + 0.6894116257906023E+01 + 0.6895690784507933E+01 + 0.6897265316891491E+01 + 0.6898839855000000E+01 + 0.6900414398804278E+01 + 0.6901988948385259E+01 + 0.6903563503851397E+01 + 0.6905138065303166E+01 + 0.6906712632748291E+01 + 0.6908287206134644E+01 + 0.6909861785409083E+01 + 0.6911436370516652E+01 + 0.6913010961399619E+01 + 0.6914585558000000E+01 + 0.6916160160289986E+01 + 0.6917734768362446E+01 + 0.6919309382340408E+01 + 0.6920884002335400E+01 + 0.6922458628325062E+01 + 0.6924033260200678E+01 + 0.6925607897852736E+01 + 0.6927182541210139E+01 + 0.6928757190261364E+01 + 0.6930331845000000E+01 + 0.6931906505443345E+01 + 0.6933481171703476E+01 + 0.6935055843916174E+01 + 0.6936630522200013E+01 + 0.6938205206473498E+01 + 0.6939779896526066E+01 + 0.6941354592147725E+01 + 0.6942929293292121E+01 + 0.6944504000166518E+01 + 0.6946078713000000E+01 + 0.6947653431947206E+01 + 0.6949228156864955E+01 + 0.6950802887535631E+01 + 0.6952377623760023E+01 + 0.6953952365553084E+01 + 0.6955527113067927E+01 + 0.6957101866458509E+01 + 0.6958676625791593E+01 + 0.6960251390998767E+01 + 0.6961826162000000E+01 + 0.6963400938729047E+01 + 0.6964975721174843E+01 + 0.6966550509340113E+01 + 0.6968125303230861E+01 + 0.6969700102891215E+01 + 0.6971274908389894E+01 + 0.6972849719794882E+01 + 0.6974424537105123E+01 + 0.6975999360212581E+01 + 0.6977574189000003E+01 + 0.6979149023382323E+01 + 0.6980723863403225E+01 + 0.6982298709138565E+01 + 0.6983873560659268E+01 + 0.6985448417978807E+01 + 0.6987023281073607E+01 + 0.6988598149919746E+01 + 0.6990173024510016E+01 + 0.6991747904863124E+01 + 0.6993322791000000E+01 + 0.6994897682928168E+01 + 0.6996472580601508E+01 + 0.6998047483960487E+01 + 0.6999622392951247E+01 + 0.7001197307585771E+01 + 0.7002772227918543E+01 + 0.7004347154004407E+01 + 0.7005922085878070E+01 + 0.7007497023543006E+01 + 0.7009071967000000E+01 + 0.7010646916239990E+01 + 0.7012221871214487E+01 + 0.7013796831865157E+01 + 0.7015371798140023E+01 + 0.7016946770061116E+01 + 0.7018521747698206E+01 + 0.7020096731121042E+01 + 0.7021671720350303E+01 + 0.7023246715330597E+01 + 0.7024821716000000E+01 + 0.7026396722309424E+01 + 0.7027971734261179E+01 + 0.7029546751870418E+01 + 0.7031121775151608E+01 + 0.7032696804111279E+01 + 0.7034271838750828E+01 + 0.7035846879071441E+01 + 0.7037421925066245E+01 + 0.7038996976715905E+01 + 0.7040572034000003E+01 + 0.7042147096914915E+01 + 0.7043722165524196E+01 + 0.7045297239908182E+01 + 0.7046872320136390E+01 + 0.7048447406152437E+01 + 0.7050022497818731E+01 + 0.7051597594998111E+01 + 0.7053172697660975E+01 + 0.7054747805944452E+01 + 0.7056322920000000E+01 + 0.7057898039930026E+01 + 0.7059473165640684E+01 + 0.7061048296989075E+01 + 0.7062623433844099E+01 + 0.7064198576211887E+01 + 0.7065773724187120E+01 + 0.7067348877864855E+01 + 0.7068924037275033E+01 + 0.7070499202346646E+01 + 0.7072074373000000E+01 + 0.7073649549178795E+01 + 0.7075224730920254E+01 + 0.7076799918284994E+01 + 0.7078375111330595E+01 + 0.7079950310079409E+01 + 0.7081525514531049E+01 + 0.7083100724684400E+01 + 0.7084675940517318E+01 + 0.7086251161975037E+01 + 0.7087826389000000E+01 + 0.7089401621555735E+01 + 0.7090976859690167E+01 + 0.7092552103472311E+01 + 0.7094127352964983E+01 + 0.7095702608158947E+01 + 0.7097277868998467E+01 + 0.7098853135427363E+01 + 0.7100428407408518E+01 + 0.7102003684934398E+01 + 0.7103578968000003E+01 + 0.7105154256613912E+01 + 0.7106729550839045E+01 + 0.7108304850751892E+01 + 0.7109880156418309E+01 + 0.7111455467780449E+01 + 0.7113030784700666E+01 + 0.7114606107041799E+01 + 0.7116181434775718E+01 + 0.7117756768043313E+01 + 0.7119332107000000E+01 + 0.7120907451748852E+01 + 0.7122482802183511E+01 + 0.7124058158145269E+01 + 0.7125633519490930E+01 + 0.7127208886257623E+01 + 0.7128784258598831E+01 + 0.7130359636668144E+01 + 0.7131935020510144E+01 + 0.7133510410000411E+01 + 0.7135085805000000E+01 + 0.7136661205405849E+01 + 0.7138236611258449E+01 + 0.7139812022634189E+01 + 0.7141387439605448E+01 + 0.7142962862198135E+01 + 0.7144538290408165E+01 + 0.7146113724230625E+01 + 0.7147689163640803E+01 + 0.7149264608583278E+01 + 0.7150840059000000E+01 + 0.7152415514855052E+01 + 0.7153990976201101E+01 + 0.7155566443112947E+01 + 0.7157141915657789E+01 + 0.7158717393814445E+01 + 0.7160292877504699E+01 + 0.7161868366650377E+01 + 0.7163443861232182E+01 + 0.7165019361322110E+01 + 0.7166594867000002E+01 + 0.7168170378319355E+01 + 0.7169745895228309E+01 + 0.7171321417648649E+01 + 0.7172896945509541E+01 + 0.7174472478825789E+01 + 0.7176048017667472E+01 + 0.7177623562104868E+01 + 0.7179199112165760E+01 + 0.7180774667812059E+01 + 0.7182350229000000E+01 + 0.7183925795683463E+01 + 0.7185501367806856E+01 + 0.7187076945312231E+01 + 0.7188652528150104E+01 + 0.7190228116369457E+01 + 0.7191803710082803E+01 + 0.7193379309402558E+01 + 0.7194954914372301E+01 + 0.7196530524928886E+01 + 0.7198106141000000E+01 + 0.7199681762527659E+01 + 0.7201257389511230E+01 + 0.7202833021964428E+01 + 0.7204408659901143E+01 + 0.7205984303337443E+01 + 0.7207559952290782E+01 + 0.7209135606778026E+01 + 0.7210711266778576E+01 + 0.7212286932213781E+01 + 0.7213862603000000E+01 + 0.7215438279093376E+01 + 0.7217013960609215E+01 + 0.7218589647702608E+01 + 0.7220165340510482E+01 + 0.7221741038958613E+01 + 0.7223316742836541E+01 + 0.7224892451934154E+01 + 0.7226468166197824E+01 + 0.7228043885816503E+01 + 0.7229619611000003E+01 + 0.7231195341899743E+01 + 0.7232771078433592E+01 + 0.7234346820461017E+01 + 0.7235922567849833E+01 + 0.7237498320564761E+01 + 0.7239074078633064E+01 + 0.7240649842083029E+01 + 0.7242225610942590E+01 + 0.7243801385239136E+01 + 0.7245377165000000E+01 + 0.7246952950252026E+01 + 0.7248528741020061E+01 + 0.7250104537328465E+01 + 0.7251680339194227E+01 + 0.7253256146548735E+01 + 0.7254831959268156E+01 + 0.7256407777229428E+01 + 0.7257983600411510E+01 + 0.7259559428951474E+01 + 0.7261135263000000E+01 + 0.7262711102656992E+01 + 0.7264286947819269E+01 + 0.7265862798332885E+01 + 0.7267438654058459E+01 + 0.7269014515026009E+01 + 0.7270590381374832E+01 + 0.7272166253244647E+01 + 0.7273742130690851E+01 + 0.7275318013638145E+01 + 0.7276893902000000E+01 + 0.7278469795711467E+01 + 0.7280045694793983E+01 + 0.7281621599290571E+01 + 0.7283197509237914E+01 + 0.7284773424598858E+01 + 0.7286349345288623E+01 + 0.7287925271223018E+01 + 0.7289501202400371E+01 + 0.7291077138946945E+01 + 0.7292653081000003E+01 + 0.7294229028650679E+01 + 0.7295804981805624E+01 + 0.7297380940325355E+01 + 0.7298956904082059E+01 + 0.7300532873083470E+01 + 0.7302108847424783E+01 + 0.7303684827201526E+01 + 0.7305260812441897E+01 + 0.7306836803069762E+01 + 0.7308412799000000E+01 + 0.7309988800175323E+01 + 0.7311564806649720E+01 + 0.7313140818505010E+01 + 0.7314716835815010E+01 + 0.7316292858560555E+01 + 0.7317868886662504E+01 + 0.7319444920041671E+01 + 0.7321020958677006E+01 + 0.7322597002637523E+01 + 0.7324173052000000E+01 + 0.7325749106817582E+01 + 0.7327325167048953E+01 + 0.7328901232629181E+01 + 0.7330477303497569E+01 + 0.7332053379642743E+01 + 0.7333629461085141E+01 + 0.7335205547845492E+01 + 0.7336781639929732E+01 + 0.7338357737320883E+01 + 0.7339933840000000E+01 + 0.7341509947960429E+01 + 0.7343086061244697E+01 + 0.7344662179907622E+01 + 0.7346238303999430E+01 + 0.7347814433516857E+01 + 0.7349390568422145E+01 + 0.7350966708676812E+01 + 0.7352542854233046E+01 + 0.7354119005028606E+01 + 0.7355695161000000E+01 + 0.7357271322116040E+01 + 0.7358847488474713E+01 + 0.7360423660206303E+01 + 0.7361999837428064E+01 + 0.7363576020105725E+01 + 0.7365152208107265E+01 + 0.7366728401300350E+01 + 0.7368304599631892E+01 + 0.7369880803171666E+01 + 0.7371457012000000E+01 + 0.7373033226179563E+01 + 0.7374609445702339E+01 + 0.7376185670542658E+01 + 0.7377761900677211E+01 + 0.7379338136110278E+01 + 0.7380914376863949E+01 + 0.7382490622960063E+01 + 0.7384066874388543E+01 + 0.7385643131089800E+01 + 0.7387219393000000E+01 + 0.7388795660077765E+01 + 0.7390371932371610E+01 + 0.7391948209952524E+01 + 0.7393524492885113E+01 + 0.7395100781159887E+01 + 0.7396677074719541E+01 + 0.7398253373506337E+01 + 0.7399829677483827E+01 + 0.7401405986648578E+01 + 0.7402982301000000E+01 + 0.7404558620547678E+01 + 0.7406134945341902E+01 + 0.7407711275443133E+01 + 0.7409287610904942E+01 + 0.7410863951700669E+01 + 0.7412440297751914E+01 + 0.7414016648980487E+01 + 0.7415593005372585E+01 + 0.7417169367014225E+01 + 0.7418745734000000E+01 + 0.7420322106385891E+01 + 0.7421898484073393E+01 + 0.7423474866925377E+01 + 0.7425051254817908E+01 + 0.7426627647780340E+01 + 0.7428204045940928E+01 + 0.7429780449428407E+01 + 0.7431356858301745E+01 + 0.7432933272511770E+01 + 0.7434509692000000E+01 + 0.7436086116708045E+01 + 0.7437662546577825E+01 + 0.7439238981551352E+01 + 0.7440815421579834E+01 + 0.7442391866721519E+01 + 0.7443968317103714E+01 + 0.7445544772853258E+01 + 0.7447121234000609E+01 + 0.7448697700426795E+01 + 0.7450274172000000E+01 + 0.7451850648622839E+01 + 0.7453427130335701E+01 + 0.7455003617213417E+01 + 0.7456580109326848E+01 + 0.7458156606700746E+01 + 0.7459733109330106E+01 + 0.7461309617209142E+01 + 0.7462886130314527E+01 + 0.7464462648595760E+01 + 0.7466039172000000E+01 + 0.7467615700492360E+01 + 0.7469192234109745E+01 + 0.7470768772907009E+01 + 0.7472345316936079E+01 + 0.7473921866214746E+01 + 0.7475498420738795E+01 + 0.7477074980503450E+01 + 0.7478651545492096E+01 + 0.7480228115669790E+01 + 0.7481804691000000E+01 + 0.7483381271450408E+01 + 0.7484957857005496E+01 + 0.7486534447653947E+01 + 0.7488111043389047E+01 + 0.7489687644257524E+01 + 0.7491264250340583E+01 + 0.7492840861718551E+01 + 0.7494417478384497E+01 + 0.7495994100196249E+01 + 0.7497570727000000E+01 + 0.7499147358702490E+01 + 0.7500723995452614E+01 + 0.7502300637459825E+01 + 0.7503877284913439E+01 + 0.7505453937768902E+01 + 0.7507030595830757E+01 + 0.7508607258902846E+01 + 0.7510183926898066E+01 + 0.7511760599898303E+01 + 0.7513337278000000E+01 + 0.7514913961279214E+01 + 0.7516490649730554E+01 + 0.7518067343328252E+01 + 0.7519644042048143E+01 + 0.7521220745884659E+01 + 0.7522797454844218E+01 + 0.7524374168933405E+01 + 0.7525950888156070E+01 + 0.7527527612511845E+01 + 0.7529104342000000E+01 + 0.7530681076619310E+01 + 0.7532257816366572E+01 + 0.7533834561238079E+01 + 0.7535411311231085E+01 + 0.7536988066353879E+01 + 0.7538564826621878E+01 + 0.7540141592050168E+01 + 0.7541718362626424E+01 + 0.7543295138295854E+01 + 0.7544871919000000E+01 + 0.7546448704699539E+01 + 0.7548025495431610E+01 + 0.7549602291252477E+01 + 0.7551179092215399E+01 + 0.7552755898338691E+01 + 0.7554332709618127E+01 + 0.7555909526048891E+01 + 0.7557486347613867E+01 + 0.7559063174276851E+01 + 0.7560640006000000E+01 + 0.7562216842750780E+01 + 0.7563793684517855E+01 + 0.7565370531295202E+01 + 0.7566947383080144E+01 + 0.7568524239909042E+01 + 0.7570101101843432E+01 + 0.7571677968944387E+01 + 0.7573254841220498E+01 + 0.7574831718598965E+01 + 0.7576408601000000E+01 + 0.7577985488372968E+01 + 0.7579562380783929E+01 + 0.7581139278328104E+01 + 0.7582716181089142E+01 + 0.7584293089016181E+01 + 0.7585870001971569E+01 + 0.7587446919817920E+01 + 0.7589023842520154E+01 + 0.7590600770201796E+01 + 0.7592177703000003E+01 + 0.7593754641014813E+01 + 0.7595331584197807E+01 + 0.7596908532463433E+01 + 0.7598485485732502E+01 + 0.7600062443999620E+01 + 0.7601639407307009E+01 + 0.7603216375696896E+01 + 0.7604793349163511E+01 + 0.7606370327626726E+01 + 0.7607947311000000E+01 + 0.7609524299234748E+01 + 0.7611101292434139E+01 + 0.7612678290739283E+01 + 0.7614255294276730E+01 + 0.7615832303003647E+01 + 0.7617409316767940E+01 + 0.7618986335417566E+01 + 0.7620563358913261E+01 + 0.7622140387390551E+01 + 0.7623717421000000E+01 + 0.7625294459846361E+01 + 0.7626871503851104E+01 + 0.7628448552889889E+01 + 0.7630025606845637E+01 + 0.7631602665685750E+01 + 0.7633179729432124E+01 + 0.7634756798107627E+01 + 0.7636333871738953E+01 + 0.7637910950358703E+01 + 0.7639488034000000E+01 + 0.7641065122691558E+01 + 0.7642642216444505E+01 + 0.7644219315265570E+01 + 0.7645796419158178E+01 + 0.7647373528087445E+01 + 0.7648950641993750E+01 + 0.7650527760817881E+01 + 0.7652104884549289E+01 + 0.7653682013252870E+01 + 0.7655259147000002E+01 + 0.7656836285839585E+01 + 0.7658413429730604E+01 + 0.7659990578609558E+01 + 0.7661567732417107E+01 + 0.7663144891142187E+01 + 0.7664722054804893E+01 + 0.7666299223425592E+01 + 0.7667876397009997E+01 + 0.7669453575541117E+01 + 0.7671030759000000E+01 + 0.7672607947380056E+01 + 0.7674185140724112E+01 + 0.7675762339087346E+01 + 0.7677339542520254E+01 + 0.7678916751018810E+01 + 0.7680493964543826E+01 + 0.7682071183055403E+01 + 0.7683648406506884E+01 + 0.7685225634841105E+01 + 0.7686802868000000E+01 + 0.7688380105953526E+01 + 0.7689957348783697E+01 + 0.7691534596600548E+01 + 0.7693111849505809E+01 + 0.7694689107504711E+01 + 0.7696266370540222E+01 + 0.7697843638554384E+01 + 0.7699420911496027E+01 + 0.7700998189324483E+01 + 0.7702575472000000E+01 + 0.7704152759498624E+01 + 0.7705730051859653E+01 + 0.7707307349138187E+01 + 0.7708884651385685E+01 + 0.7710461958611272E+01 + 0.7712039270796741E+01 + 0.7713616587923678E+01 + 0.7715193909987796E+01 + 0.7716771237006734E+01 + 0.7718348569000002E+01 + 0.7719925905973962E+01 + 0.7721503247882362E+01 + 0.7723080594665786E+01 + 0.7724657946270535E+01 + 0.7726235302709224E+01 + 0.7727812664037274E+01 + 0.7729390030310444E+01 + 0.7730967401562556E+01 + 0.7732544777793443E+01 + 0.7734122159000000E+01 + 0.7735699545172360E+01 + 0.7737276936273561E+01 + 0.7738854332259875E+01 + 0.7740431733090520E+01 + 0.7742009138759017E+01 + 0.7743586549281024E+01 + 0.7745163964672334E+01 + 0.7746741384935275E+01 + 0.7748318810051284E+01 + 0.7749896240000000E+01 + 0.7751473674775365E+01 + 0.7753051114428488E+01 + 0.7754628559024783E+01 + 0.7756206008622508E+01 + 0.7757783463196871E+01 + 0.7759360922669488E+01 + 0.7760938386962125E+01 + 0.7762515856059133E+01 + 0.7764093330041860E+01 + 0.7765670809000000E+01 + 0.7767248292988713E+01 + 0.7768825781925036E+01 + 0.7770403275691472E+01 + 0.7771980774179105E+01 + 0.7773558277378792E+01 + 0.7775135785345746E+01 + 0.7776713298136255E+01 + 0.7778290815805865E+01 + 0.7779868338409005E+01 + 0.7781445866000003E+01 + 0.7783023398605526E+01 + 0.7784600936141633E+01 + 0.7786178478496712E+01 + 0.7787756025568037E+01 + 0.7789333577356032E+01 + 0.7790911133927685E+01 + 0.7792488695350675E+01 + 0.7794066261667917E+01 + 0.7795643832883949E+01 + 0.7797221409000000E+01 + 0.7798798990004931E+01 + 0.7800376575838089E+01 + 0.7801954166426455E+01 + 0.7803531761706972E+01 + 0.7805109361732481E+01 + 0.7806686966630607E+01 + 0.7808264576528681E+01 + 0.7809842191462456E+01 + 0.7811419811325706E+01 + 0.7812997436000000E+01 + 0.7814575065390120E+01 + 0.7816152699493717E+01 + 0.7817730338331667E+01 + 0.7819307981925530E+01 + 0.7820885630304963E+01 + 0.7822463283504821E+01 + 0.7824040941559849E+01 + 0.7825618604492339E+01 + 0.7827196272305279E+01 + 0.7828773945000000E+01 + 0.7830351622570897E+01 + 0.7831929304984638E+01 + 0.7833506992200952E+01 + 0.7835084684181445E+01 + 0.7836662380909553E+01 + 0.7838240082382781E+01 + 0.7839817788599198E+01 + 0.7841395499575950E+01 + 0.7842973215359788E+01 + 0.7844550936000003E+01 + 0.7846128661532180E+01 + 0.7847706391937117E+01 + 0.7849284127181902E+01 + 0.7850861867231324E+01 + 0.7852439612023323E+01 + 0.7854017361478531E+01 + 0.7855595115518946E+01 + 0.7857172874166276E+01 + 0.7858750637596779E+01 + 0.7860328406000000E+01 + 0.7861906179501811E+01 + 0.7863483957973354E+01 + 0.7865061741222098E+01 + 0.7866639529069685E+01 + 0.7868217321502589E+01 + 0.7869795118613631E+01 + 0.7871372920496666E+01 + 0.7872950727201699E+01 + 0.7874528538710751E+01 + 0.7876106355000000E+01 + 0.7877684176049709E+01 + 0.7879262001856493E+01 + 0.7880839832421068E+01 + 0.7882417667745139E+01 + 0.7883995507842061E+01 + 0.7885573352732699E+01 + 0.7887151202437394E+01 + 0.7888729056937348E+01 + 0.7890306916153105E+01 + 0.7891884780000000E+01 + 0.7893462648433417E+01 + 0.7895040521568995E+01 + 0.7896618399562426E+01 + 0.7898196282551139E+01 + 0.7899774170460279E+01 + 0.7901352063078017E+01 + 0.7902929960192898E+01 + 0.7904507861752287E+01 + 0.7906085767949746E+01 + 0.7907663679000002E+01 + 0.7909241595055528E+01 + 0.7910819516019764E+01 + 0.7912397441733881E+01 + 0.7913975372051671E+01 + 0.7915553306973529E+01 + 0.7917131246594448E+01 + 0.7918709191009989E+01 + 0.7920287140255716E+01 + 0.7921865094274199E+01 + 0.7923443053000000E+01 + 0.7925021016379124E+01 + 0.7926598984403303E+01 + 0.7928176957075712E+01 + 0.7929754934401966E+01 + 0.7931332916416146E+01 + 0.7932910903170703E+01 + 0.7934488894717738E+01 + 0.7936066891070496E+01 + 0.7937644892181975E+01 + 0.7939222898000000E+01 + 0.7940800908480079E+01 + 0.7942378923608485E+01 + 0.7943956943379189E+01 + 0.7945534967790217E+01 + 0.7947112996886883E+01 + 0.7948691030744992E+01 + 0.7950269069439547E+01 + 0.7951847112966454E+01 + 0.7953425161199016E+01 + 0.7955003214000000E+01 + 0.7956581271279814E+01 + 0.7958159333139443E+01 + 0.7959737399727517E+01 + 0.7961315471178748E+01 + 0.7962893547466001E+01 + 0.7964471628457732E+01 + 0.7966049714021857E+01 + 0.7967627804098058E+01 + 0.7969205898737273E+01 + 0.7970783998000003E+01 + 0.7972362101945542E+01 + 0.7973940210628372E+01 + 0.7975518324101762E+01 + 0.7977096442410840E+01 + 0.7978674565506098E+01 + 0.7980252693276966E+01 + 0.7981830825612970E+01 + 0.7983408962470548E+01 + 0.7984987103909864E+01 + 0.7986565250000000E+01 + 0.7988143400798071E+01 + 0.7989721556313300E+01 + 0.7991299716542946E+01 + 0.7992877881481530E+01 + 0.7994456051091789E+01 + 0.7996034225315964E+01 + 0.7997612404096750E+01 + 0.7999190587425482E+01 + 0.8000768775368840E+01 + 0.8002346967999999E+01 + 0.8003925165367832E+01 + 0.8005503367424060E+01 + 0.8007081574096119E+01 + 0.8008659785317740E+01 + 0.8010238001095956E+01 + 0.8011816221485084E+01 + 0.8013394446539978E+01 + 0.8014972676300321E+01 + 0.8016550910782280E+01 + 0.8018129150000000E+01 + 0.8019707393946657E+01 + 0.8021285642531534E+01 + 0.8022863895642937E+01 + 0.8024442153180061E+01 + 0.8026020415168564E+01 + 0.8027598681715697E+01 + 0.8029176952929420E+01 + 0.8030755228877910E+01 + 0.8032333509567696E+01 + 0.8033911795000000E+01 + 0.8035490085156926E+01 + 0.8037068379944083E+01 + 0.8038646679247950E+01 + 0.8040224982966985E+01 + 0.8041803291138766E+01 + 0.8043381603890635E+01 + 0.8044959921350156E+01 + 0.8046538243568335E+01 + 0.8048116570477561E+01 + 0.8049694902000001E+01 + 0.8051273238074215E+01 + 0.8052851578704289E+01 + 0.8054429923910698E+01 + 0.8056008273712701E+01 + 0.8057586628115473E+01 + 0.8059164987115107E+01 + 0.8060743350707535E+01 + 0.8062321718888642E+01 + 0.8063900091654203E+01 + 0.8065478469000000E+01 + 0.8067056850925999E+01 + 0.8068635237448966E+01 + 0.8070213628589869E+01 + 0.8071792024364703E+01 + 0.8073370424731715E+01 + 0.8074948829611891E+01 + 0.8076527238926932E+01 + 0.8078105652678234E+01 + 0.8079684070990734E+01 + 0.8081262494000001E+01 + 0.8082840921795899E+01 + 0.8084419354285501E+01 + 0.8085997791330165E+01 + 0.8087576232802803E+01 + 0.8089154678710413E+01 + 0.8090733129146525E+01 + 0.8092311584205035E+01 + 0.8093890043915309E+01 + 0.8095468508206713E+01 + 0.8097046977000000E+01 + 0.8098625450239139E+01 + 0.8100203927960919E+01 + 0.8101782410225345E+01 + 0.8103360897089516E+01 + 0.8104939388576794E+01 + 0.8106517884688781E+01 + 0.8108096385426302E+01 + 0.8109674890765673E+01 + 0.8111253400645220E+01 + 0.8112831914999999E+01 + 0.8114410433791987E+01 + 0.8115988957090796E+01 + 0.8117567484992961E+01 + 0.8119146017582382E+01 + 0.8120724554796162E+01 + 0.8122303096476710E+01 + 0.8123881642467156E+01 + 0.8125460192749671E+01 + 0.8127038747521890E+01 + 0.8128617307000001E+01 + 0.8130195871327556E+01 + 0.8131774440357635E+01 + 0.8133353013870703E+01 + 0.8134931591666749E+01 + 0.8136510173772827E+01 + 0.8138088760362468E+01 + 0.8139667351609578E+01 + 0.8141245947563482E+01 + 0.8142824548080414E+01 + 0.8144403153000001E+01 + 0.8145981762212184E+01 + 0.8147560375808171E+01 + 0.8149138993929475E+01 + 0.8150717616706597E+01 + 0.8152296244141885E+01 + 0.8153874876155014E+01 + 0.8155453512664936E+01 + 0.8157032153629476E+01 + 0.8158610799066738E+01 + 0.8160189449000001E+01 + 0.8161768103446766E+01 + 0.8163346762401385E+01 + 0.8164925425852426E+01 + 0.8166504093790126E+01 + 0.8168082766224179E+01 + 0.8169661443176825E+01 + 0.8171240124669883E+01 + 0.8172818810687845E+01 + 0.8174397501157337E+01 + 0.8175976196000001E+01 + 0.8177554895172042E+01 + 0.8179133598767871E+01 + 0.8180712306916458E+01 + 0.8182291019734793E+01 + 0.8183869737200668E+01 + 0.8185448459202064E+01 + 0.8187027185626166E+01 + 0.8188605916402624E+01 + 0.8190184651526867E+01 + 0.8191763391000000E+01 + 0.8193342134841119E+01 + 0.8194920883141347E+01 + 0.8196499636009818E+01 + 0.8198078393544661E+01 + 0.8199657155716134E+01 + 0.8201235922411989E+01 + 0.8202814693519446E+01 + 0.8204393468975704E+01 + 0.8205972248795440E+01 + 0.8207551033000000E+01 + 0.8209129821611878E+01 + 0.8210708614658168E+01 + 0.8212287412167104E+01 + 0.8213866214166906E+01 + 0.8215445020685468E+01 + 0.8217023831750492E+01 + 0.8218602647388652E+01 + 0.8220181467564858E+01 + 0.8221760292148320E+01 + 0.8223339121000000E+01 + 0.8224917954038117E+01 + 0.8226496791409851E+01 + 0.8228075633319625E+01 + 0.8229654479952254E+01 + 0.8231233331264594E+01 + 0.8232812187066427E+01 + 0.8234391047166765E+01 + 0.8235969911475708E+01 + 0.8237548780060035E+01 + 0.8239127653000001E+01 + 0.8240706530368099E+01 + 0.8242285412205733E+01 + 0.8243864298546546E+01 + 0.8245443189419898E+01 + 0.8247022084805540E+01 + 0.8248600984651192E+01 + 0.8250179888904469E+01 + 0.8251758797538326E+01 + 0.8253337710564969E+01 + 0.8254916628000000E+01 + 0.8256495549854810E+01 + 0.8258074476124035E+01 + 0.8259653406798108E+01 + 0.8261232341869055E+01 + 0.8262811281347410E+01 + 0.8264390225255628E+01 + 0.8265969173615734E+01 + 0.8267548126411322E+01 + 0.8269127083566437E+01 + 0.8270706045000003E+01 + 0.8272285010667728E+01 + 0.8273863980672479E+01 + 0.8275442955153903E+01 + 0.8277021934237180E+01 + 0.8278600917879171E+01 + 0.8280179905928158E+01 + 0.8281758898232495E+01 + 0.8283337894753110E+01 + 0.8284916895625461E+01 + 0.8286495901000000E+01 + 0.8288074910981399E+01 + 0.8289653925491134E+01 + 0.8291232944404895E+01 + 0.8292811967605633E+01 + 0.8294390995060748E+01 + 0.8295970026792126E+01 + 0.8297549062822620E+01 + 0.8299128103178923E+01 + 0.8300707147893670E+01 + 0.8302286197000001E+01 + 0.8303865250526648E+01 + 0.8305444308484651E+01 + 0.8307023370880641E+01 + 0.8308602437717964E+01 + 0.8310181508961934E+01 + 0.8311760584553312E+01 + 0.8313339664433251E+01 + 0.8314918748590911E+01 + 0.8316497837089839E+01 + 0.8318076930000000E+01 + 0.8319656027369987E+01 + 0.8321235129162986E+01 + 0.8322814235320816E+01 + 0.8324393345788213E+01 + 0.8325972460543738E+01 + 0.8327551579587771E+01 + 0.8329130702921397E+01 + 0.8330709830565859E+01 + 0.8332288962573664E+01 + 0.8333868099000002E+01 + 0.8335447239880946E+01 + 0.8337026385176102E+01 + 0.8338605534825955E+01 + 0.8340184688774967E+01 + 0.8341763847013729E+01 + 0.8343343009562606E+01 + 0.8344922176442182E+01 + 0.8346501347656453E+01 + 0.8348080523183704E+01 + 0.8349659703000000E+01 + 0.8351238887097884E+01 + 0.8352818075535742E+01 + 0.8354397268388428E+01 + 0.8355976465721497E+01 + 0.8357555667492377E+01 + 0.8359134873588747E+01 + 0.8360714083898156E+01 + 0.8362293298370600E+01 + 0.8363872517052849E+01 + 0.8365451739999999E+01 + 0.8367030967267152E+01 + 0.8368610198909398E+01 + 0.8370189434981842E+01 + 0.8371768675531252E+01 + 0.8373347920507623E+01 + 0.8374927169798507E+01 + 0.8376506423291575E+01 + 0.8378085680944261E+01 + 0.8379664942822117E+01 + 0.8381244209000000E+01 + 0.8382823479536297E+01 + 0.8384402754423547E+01 + 0.8385982033637820E+01 + 0.8387561317157395E+01 + 0.8389140604986274E+01 + 0.8390719897145033E+01 + 0.8392299193654045E+01 + 0.8393878494503898E+01 + 0.8395457799639056E+01 + 0.8397037109000001E+01 + 0.8398616422546338E+01 + 0.8400195740314143E+01 + 0.8401775062358604E+01 + 0.8403354388732231E+01 + 0.8404933719456263E+01 + 0.8406513054531787E+01 + 0.8408092393959185E+01 + 0.8409671737717012E+01 + 0.8411251085750010E+01 + 0.8412830438000000E+01 + 0.8414409794430169E+01 + 0.8415989155089106E+01 + 0.8417568520046757E+01 + 0.8419147889366677E+01 + 0.8420727263038030E+01 + 0.8422306641002004E+01 + 0.8423886023199385E+01 + 0.8425465409595466E+01 + 0.8427044800193498E+01 + 0.8428624194999999E+01 + 0.8430203594025999E+01 + 0.8431782997300521E+01 + 0.8433362404857107E+01 + 0.8434941816728683E+01 + 0.8436521232941187E+01 + 0.8438100653516036E+01 + 0.8439680078473709E+01 + 0.8441259507782741E+01 + 0.8442838941331141E+01 + 0.8444418379000000E+01 + 0.8445997820711938E+01 + 0.8447577266555731E+01 + 0.8449156716661681E+01 + 0.8450736171149794E+01 + 0.8452315630020314E+01 + 0.8453895093196206E+01 + 0.8455474560599770E+01 + 0.8457054032190069E+01 + 0.8458633507983162E+01 + 0.8460212988000002E+01 + 0.8461792472257136E+01 + 0.8463371960753461E+01 + 0.8464951453483467E+01 + 0.8466530950441966E+01 + 0.8468110451627561E+01 + 0.8469689957041314E+01 + 0.8471269466684319E+01 + 0.8472848980557680E+01 + 0.8474428498662533E+01 + 0.8476008021000000E+01 + 0.8477587547570094E+01 + 0.8479167078368317E+01 + 0.8480746613389055E+01 + 0.8482326152628023E+01 + 0.8483905696096404E+01 + 0.8485485243815377E+01 + 0.8487064795805649E+01 + 0.8488644352050507E+01 + 0.8490223912475202E+01 + 0.8491803477000000E+01 + 0.8493383045581055E+01 + 0.8494962618318079E+01 + 0.8496542195346681E+01 + 0.8498121776788912E+01 + 0.8499701362609381E+01 + 0.8501280952671095E+01 + 0.8502860546836820E+01 + 0.8504440145055911E+01 + 0.8506019747411932E+01 + 0.8507599354000000E+01 + 0.8509178964886077E+01 + 0.8510758580019543E+01 + 0.8512338199320624E+01 + 0.8513917822716548E+01 + 0.8515497450215920E+01 + 0.8517077081879826E+01 + 0.8518656717769822E+01 + 0.8520236357922240E+01 + 0.8521816002334337E+01 + 0.8523395651000001E+01 + 0.8524975303907885E+01 + 0.8526554961025695E+01 + 0.8528134622315891E+01 + 0.8529714287742509E+01 + 0.8531293957287831E+01 + 0.8532873630945916E+01 + 0.8534453308711424E+01 + 0.8536032990603559E+01 + 0.8537612676679579E+01 + 0.8539192367000000E+01 + 0.8540772061602874E+01 + 0.8542351760436326E+01 + 0.8543931463426015E+01 + 0.8545511170504957E+01 + 0.8547090881691833E+01 + 0.8548670597060591E+01 + 0.8550250316685240E+01 + 0.8551830040588698E+01 + 0.8553409768714653E+01 + 0.8554989501000000E+01 + 0.8556569237394736E+01 + 0.8558148977901338E+01 + 0.8559728722535404E+01 + 0.8561308471311792E+01 + 0.8562888224236836E+01 + 0.8564467981311358E+01 + 0.8566047742535975E+01 + 0.8567627507904163E+01 + 0.8569207277398347E+01 + 0.8570787051000000E+01 + 0.8572366828705908E+01 + 0.8573946610574140E+01 + 0.8575526396678074E+01 + 0.8577106187081883E+01 + 0.8578685981742757E+01 + 0.8580265780548844E+01 + 0.8581845583388189E+01 + 0.8583425390210897E+01 + 0.8585005201063302E+01 + 0.8586585016000003E+01 + 0.8588164835075935E+01 + 0.8589744658347350E+01 + 0.8591324485870825E+01 + 0.8592904317694277E+01 + 0.8594484153764864E+01 + 0.8596063993964750E+01 + 0.8597643838176332E+01 + 0.8599223686361276E+01 + 0.8600803538604129E+01 + 0.8602383395000000E+01 + 0.8603963255611568E+01 + 0.8605543120371738E+01 + 0.8607122989180990E+01 + 0.8608702861951674E+01 + 0.8610282738734213E+01 + 0.8611862619668122E+01 + 0.8613442504892651E+01 + 0.8615022394442827E+01 + 0.8616602288192091E+01 + 0.8618182186000000E+01 + 0.8619762087765640E+01 + 0.8621341993546276E+01 + 0.8622921903438721E+01 + 0.8624501817530808E+01 + 0.8626081735806139E+01 + 0.8627661658181049E+01 + 0.8629241584571780E+01 + 0.8630821514955715E+01 + 0.8632401449405016E+01 + 0.8633981388000001E+01 + 0.8635561330795186E+01 + 0.8637141277741888E+01 + 0.8638721228765618E+01 + 0.8640301183798325E+01 + 0.8641881142846630E+01 + 0.8643461105965361E+01 + 0.8645041073209889E+01 + 0.8646621044620154E+01 + 0.8648201020212200E+01 + 0.8649781000000003E+01 + 0.8651360983976622E+01 + 0.8652940972051432E+01 + 0.8654520964112878E+01 + 0.8656100960060268E+01 + 0.8657680959919066E+01 + 0.8659260963796138E+01 + 0.8660840971799049E+01 + 0.8662420983996269E+01 + 0.8664001000395697E+01 + 0.8665581021000000E+01 + 0.8667161045791595E+01 + 0.8668741074671818E+01 + 0.8670321107521753E+01 + 0.8671901144235704E+01 + 0.8673481184861796E+01 + 0.8675061229547397E+01 + 0.8676641278439655E+01 + 0.8678221331573816E+01 + 0.8679801388811645E+01 + 0.8681381450000000E+01 + 0.8682961515034512E+01 + 0.8684541584005974E+01 + 0.8686121657053977E+01 + 0.8687701734307201E+01 + 0.8689281815767588E+01 + 0.8690861901355312E+01 + 0.8692441990989829E+01 + 0.8694022084629246E+01 + 0.8695602182291580E+01 + 0.8697182284000000E+01 + 0.8698762389771902E+01 + 0.8700342499601570E+01 + 0.8701922613477501E+01 + 0.8703502731389902E+01 + 0.8705082853348662E+01 + 0.8706662979376382E+01 + 0.8708243109495253E+01 + 0.8709823243689460E+01 + 0.8711403381884299E+01 + 0.8712983524000000E+01 + 0.8714563669992469E+01 + 0.8716143819960292E+01 + 0.8717723974037734E+01 + 0.8719304132345842E+01 + 0.8720884294852080E+01 + 0.8722464461424822E+01 + 0.8724044631932069E+01 + 0.8725624806318908E+01 + 0.8727204984649934E+01 + 0.8728785167000000E+01 + 0.8730365353430804E+01 + 0.8731945543951342E+01 + 0.8733525738557450E+01 + 0.8735105937242285E+01 + 0.8736686139968004E+01 + 0.8738266346676763E+01 + 0.8739846557311196E+01 + 0.8741426771863242E+01 + 0.8743006990401211E+01 + 0.8744587213000001E+01 + 0.8746167439708785E+01 + 0.8747747670473890E+01 + 0.8749327905215941E+01 + 0.8750908143863448E+01 + 0.8752488386436804E+01 + 0.8754068633015660E+01 + 0.8755648883679664E+01 + 0.8757229138448519E+01 + 0.8758809397249026E+01 + 0.8760389660000000E+01 + 0.8761969926647467E+01 + 0.8763550197246325E+01 + 0.8765130471878685E+01 + 0.8766710750618397E+01 + 0.8768291033443221E+01 + 0.8769871320268923E+01 + 0.8771451611011372E+01 + 0.8773031905653907E+01 + 0.8774612204284473E+01 + 0.8776192506999999E+01 + 0.8777772813857860E+01 + 0.8779353124757137E+01 + 0.8780933439557341E+01 + 0.8782513758131891E+01 + 0.8784094080515800E+01 + 0.8785674406848333E+01 + 0.8787254737269008E+01 + 0.8788835071828258E+01 + 0.8790415410438433E+01 + 0.8791995753000000E+01 + 0.8793576099445875E+01 + 0.8795156449838727E+01 + 0.8796736804273671E+01 + 0.8798317162835250E+01 + 0.8799897525485132E+01 + 0.8801477892105723E+01 + 0.8803058262579175E+01 + 0.8804638636852660E+01 + 0.8806219014974076E+01 + 0.8807799397000000E+01 + 0.8809379782986676E+01 + 0.8810960172989061E+01 + 0.8812540567061793E+01 + 0.8814120965251219E+01 + 0.8815701367507394E+01 + 0.8817281773718246E+01 + 0.8818862183771822E+01 + 0.8820442597625391E+01 + 0.8822023015343516E+01 + 0.8823603436999999E+01 + 0.8825183862652988E+01 + 0.8826764292298053E+01 + 0.8828344725915112E+01 + 0.8829925163485411E+01 + 0.8831505605005441E+01 + 0.8833086050481551E+01 + 0.8834666499920184E+01 + 0.8836246953323144E+01 + 0.8837827410685078E+01 + 0.8839407872000001E+01 + 0.8840988337265838E+01 + 0.8842568806496084E+01 + 0.8844149279708132E+01 + 0.8845729756915379E+01 + 0.8847310238084720E+01 + 0.8848890723153064E+01 + 0.8850471212057666E+01 + 0.8852051704787117E+01 + 0.8853632201409564E+01 + 0.8855212701999999E+01 + 0.8856793206608527E+01 + 0.8858373715185660E+01 + 0.8859954227657021E+01 + 0.8861534743954886E+01 + 0.8863115264088989E+01 + 0.8864695788119022E+01 + 0.8866276316105093E+01 + 0.8867856848082793E+01 + 0.8869437384049668E+01 + 0.8871017924000000E+01 + 0.8872598467922744E+01 + 0.8874179015785577E+01 + 0.8875759567550865E+01 + 0.8877340123182542E+01 + 0.8878920682662869E+01 + 0.8880501245985931E+01 + 0.8882081813146419E+01 + 0.8883662384163552E+01 + 0.8885242959094573E+01 + 0.8886823538000000E+01 + 0.8888404120917873E+01 + 0.8889984707796327E+01 + 0.8891565298561011E+01 + 0.8893145893144954E+01 + 0.8894726491566834E+01 + 0.8896307093900591E+01 + 0.8897887700220243E+01 + 0.8899468310548699E+01 + 0.8901048924829656E+01 + 0.8902629543000000E+01 + 0.8904210165009737E+01 + 0.8905790790861341E+01 + 0.8907371420570403E+01 + 0.8908952054151790E+01 + 0.8910532691611829E+01 + 0.8912113332951353E+01 + 0.8913693978170974E+01 + 0.8915274627264171E+01 + 0.8916855280213360E+01 + 0.8918435937000000E+01 + 0.8920016597620885E+01 + 0.8921597262134098E+01 + 0.8923177930613052E+01 + 0.8924758603121946E+01 + 0.8926339279617906E+01 + 0.8927919959988977E+01 + 0.8929500644123078E+01 + 0.8931081331970422E+01 + 0.8932662023577720E+01 + 0.8934242719000000E+01 + 0.8935823418292275E+01 + 0.8937404121509575E+01 + 0.8938984828706921E+01 + 0.8940565539931031E+01 + 0.8942146255132105E+01 + 0.8943726974198061E+01 + 0.8945307697016943E+01 + 0.8946888423545875E+01 + 0.8948469153849082E+01 + 0.8950049888000002E+01 + 0.8951630626056724E+01 + 0.8953211368015966E+01 + 0.8954792113859091E+01 + 0.8956372863568449E+01 + 0.8957953617137697E+01 + 0.8959534374567804E+01 + 0.8961115135859940E+01 + 0.8962695901020155E+01 + 0.8964276670062084E+01 + 0.8965857443000001E+01 + 0.8967438219836108E+01 + 0.8969019000524281E+01 + 0.8970599785006307E+01 + 0.8972180573229654E+01 + 0.8973761365207652E+01 + 0.8975342160996144E+01 + 0.8976922960651281E+01 + 0.8978503764206074E+01 + 0.8980084571657638E+01 + 0.8981665382999999E+01 + 0.8983246198222744E+01 + 0.8984827017297654E+01 + 0.8986407840192065E+01 + 0.8987988666873672E+01 + 0.8989569497314360E+01 + 0.8991150331488708E+01 + 0.8992731169372332E+01 + 0.8994312010999929E+01 + 0.8995892856497767E+01 + 0.8997473705999999E+01 + 0.8999054559587210E+01 + 0.9000635417125739E+01 + 0.9002216278428358E+01 + 0.9003797143323443E+01 + 0.9005378011820772E+01 + 0.9006958884047144E+01 + 0.9008539760130498E+01 + 0.9010120640149678E+01 + 0.9011701524107444E+01 + 0.9013282412000002E+01 + 0.9014863303805264E+01 + 0.9016444199427932E+01 + 0.9018025098754407E+01 + 0.9019606001683327E+01 + 0.9021186908255578E+01 + 0.9022767818603811E+01 + 0.9024348732860776E+01 + 0.9025929651072799E+01 + 0.9027510573152256E+01 + 0.9029091499000000E+01 + 0.9030672428550146E+01 + 0.9032253361869833E+01 + 0.9033834299059455E+01 + 0.9035415240207524E+01 + 0.9036996185264274E+01 + 0.9038577134090749E+01 + 0.9040158086548214E+01 + 0.9041739042600842E+01 + 0.9043320002372306E+01 + 0.9044900966000000E+01 + 0.9046481933584236E+01 + 0.9048062905076963E+01 + 0.9049643880393051E+01 + 0.9051224859453601E+01 + 0.9052805842252207E+01 + 0.9054386828829225E+01 + 0.9055967819225046E+01 + 0.9057548813435419E+01 + 0.9059129811386875E+01 + 0.9060710813000000E+01 + 0.9062291818227697E+01 + 0.9063872827152180E+01 + 0.9065453839887979E+01 + 0.9067034856541271E+01 + 0.9068615877121072E+01 + 0.9070196901573699E+01 + 0.9071777929844419E+01 + 0.9073358961877403E+01 + 0.9074939997615148E+01 + 0.9076521037000001E+01 + 0.9078102080004470E+01 + 0.9079683126721726E+01 + 0.9081264177275092E+01 + 0.9082845231776293E+01 + 0.9084426290202151E+01 + 0.9086007352442461E+01 + 0.9087588418386247E+01 + 0.9089169487963630E+01 + 0.9090750561168447E+01 + 0.9092331637999999E+01 + 0.9093912718476789E+01 + 0.9095493802694049E+01 + 0.9097074890766200E+01 + 0.9098655982795446E+01 + 0.9100237078741953E+01 + 0.9101818178474257E+01 + 0.9103399281860755E+01 + 0.9104980388853763E+01 + 0.9106561499535658E+01 + 0.9108142614000000E+01 + 0.9109723732311554E+01 + 0.9111304854419860E+01 + 0.9112885980245657E+01 + 0.9114467109716637E+01 + 0.9116048242841282E+01 + 0.9117629379680206E+01 + 0.9119210520294477E+01 + 0.9120791664720676E+01 + 0.9122372812957401E+01 + 0.9123953965000000E+01 + 0.9125535120837444E+01 + 0.9127116280433262E+01 + 0.9128697443744613E+01 + 0.9130278610731468E+01 + 0.9131859781386432E+01 + 0.9133440955723165E+01 + 0.9135022133755513E+01 + 0.9136603315487232E+01 + 0.9138184500906466E+01 + 0.9139765690000003E+01 + 0.9141346882763305E+01 + 0.9142928079226522E+01 + 0.9144509279428474E+01 + 0.9146090483407050E+01 + 0.9147671691189292E+01 + 0.9149252902795242E+01 + 0.9150834118243976E+01 + 0.9152415337503284E+01 + 0.9153996560461470E+01 + 0.9155577787000000E+01 + 0.9157159017041799E+01 + 0.9158740250675614E+01 + 0.9160321488031656E+01 + 0.9161902729229833E+01 + 0.9163483974270360E+01 + 0.9165065223076230E+01 + 0.9166646475569754E+01 + 0.9168227731710024E+01 + 0.9169808991513113E+01 + 0.9171390255000000E+01 + 0.9172971522187234E+01 + 0.9174552793073623E+01 + 0.9176134067653546E+01 + 0.9177715345921731E+01 + 0.9179296627877006E+01 + 0.9180877913520838E+01 + 0.9182459202854723E+01 + 0.9184040495879449E+01 + 0.9185621792594681E+01 + 0.9187203093000001E+01 + 0.9188784397095079E+01 + 0.9190365704880009E+01 + 0.9191947016354973E+01 + 0.9193528331520135E+01 + 0.9195109650375363E+01 + 0.9196690972920328E+01 + 0.9198272299154716E+01 + 0.9199853629078740E+01 + 0.9201434962693462E+01 + 0.9203016300000002E+01 + 0.9204597640998603E+01 + 0.9206178985685975E+01 + 0.9207760334057936E+01 + 0.9209341686111287E+01 + 0.9210923041854169E+01 + 0.9212504401302050E+01 + 0.9214085764470063E+01 + 0.9215667131346017E+01 + 0.9217248501875387E+01 + 0.9218829875999999E+01 + 0.9220411253680565E+01 + 0.9221992634953299E+01 + 0.9223574019873306E+01 + 0.9225155408492951E+01 + 0.9226736800832837E+01 + 0.9228318196893083E+01 + 0.9229899596673127E+01 + 0.9231481000152421E+01 + 0.9233062407279441E+01 + 0.9234643818000000E+01 + 0.9236225232278102E+01 + 0.9237806650150533E+01 + 0.9239388071672288E+01 + 0.9240969496895442E+01 + 0.9242550925838367E+01 + 0.9244132358497669E+01 + 0.9245713794869369E+01 + 0.9247295234936079E+01 + 0.9248876678659611E+01 + 0.9250458126000000E+01 + 0.9252039576924203E+01 + 0.9253621031426931E+01 + 0.9255202489509827E+01 + 0.9256783951176098E+01 + 0.9258365416447195E+01 + 0.9259946885356309E+01 + 0.9261528357936802E+01 + 0.9263109834219575E+01 + 0.9264691314231719E+01 + 0.9266272798000001E+01 + 0.9267854285523313E+01 + 0.9269435776689070E+01 + 0.9271017271356811E+01 + 0.9272598769403439E+01 + 0.9274180270907657E+01 + 0.9275761776078362E+01 + 0.9277343285123974E+01 + 0.9278924798094064E+01 + 0.9280506314792008E+01 + 0.9282087835000001E+01 + 0.9283669358565565E+01 + 0.9285250885597526E+01 + 0.9286832416270046E+01 + 0.9288413950741036E+01 + 0.9289995488979546E+01 + 0.9291577030832785E+01 + 0.9293158576147627E+01 + 0.9294740124873169E+01 + 0.9296321677116913E+01 + 0.9297903233000000E+01 + 0.9299484792622417E+01 + 0.9301066355999589E+01 + 0.9302647923125800E+01 + 0.9304229493990757E+01 + 0.9305811068531048E+01 + 0.9307392646648983E+01 + 0.9308974228247378E+01 + 0.9310555813293115E+01 + 0.9312137401852404E+01 + 0.9313718994000000E+01 + 0.9315300589791740E+01 + 0.9316882189207785E+01 + 0.9318463792209379E+01 + 0.9320045398763641E+01 + 0.9321627008906027E+01 + 0.9323208622716072E+01 + 0.9324790240272815E+01 + 0.9326371861580988E+01 + 0.9327953486530165E+01 + 0.9329535115000002E+01 + 0.9331116746903067E+01 + 0.9332698382283535E+01 + 0.9334280021218479E+01 + 0.9335861663779891E+01 + 0.9337443309980600E+01 + 0.9339024959795278E+01 + 0.9340606613198283E+01 + 0.9342188270183506E+01 + 0.9343769930775148E+01 + 0.9345351595000000E+01 + 0.9346933262866862E+01 + 0.9348514934312512E+01 + 0.9350096609255731E+01 + 0.9351678287626026E+01 + 0.9353259969477659E+01 + 0.9354841654945380E+01 + 0.9356423344163574E+01 + 0.9358005037164704E+01 + 0.9359586733823221E+01 + 0.9361168434000000E+01 + 0.9362750137595162E+01 + 0.9364331844665891E+01 + 0.9365913555308637E+01 + 0.9367495269610895E+01 + 0.9369076987556214E+01 + 0.9370658709061058E+01 + 0.9372240434041798E+01 + 0.9373822162475836E+01 + 0.9375403894435186E+01 + 0.9376985630000000E+01 + 0.9378567369224744E+01 + 0.9380149112061149E+01 + 0.9381730858435255E+01 + 0.9383312608279415E+01 + 0.9384894361599237E+01 + 0.9386476118447607E+01 + 0.9388057878878005E+01 + 0.9389639642931893E+01 + 0.9391221410632140E+01 + 0.9392803182000000E+01 + 0.9394384957030077E+01 + 0.9395966735610312E+01 + 0.9397548517601987E+01 + 0.9399130302883584E+01 + 0.9400712091533558E+01 + 0.9402293883759370E+01 + 0.9403875679768019E+01 + 0.9405457479609703E+01 + 0.9407039283091608E+01 + 0.9408621090000001E+01 + 0.9410202900183329E+01 + 0.9411784713738719E+01 + 0.9413366530825471E+01 + 0.9414948351590107E+01 + 0.9416530176030591E+01 + 0.9418112004049053E+01 + 0.9419693835547102E+01 + 0.9421275670491568E+01 + 0.9422857508950337E+01 + 0.9424439351000000E+01 + 0.9426021196696894E+01 + 0.9427603046016390E+01 + 0.9429184898913626E+01 + 0.9430766755343020E+01 + 0.9432348615250835E+01 + 0.9433930478578047E+01 + 0.9435512345266655E+01 + 0.9437094215324729E+01 + 0.9438676088862746E+01 + 0.9440257966000001E+01 + 0.9441839846820226E+01 + 0.9443421731264923E+01 + 0.9445003619240019E+01 + 0.9446585510660796E+01 + 0.9448167405551033E+01 + 0.9449749304004524E+01 + 0.9451331206114887E+01 + 0.9452913111894711E+01 + 0.9454495021231013E+01 + 0.9456076934000000E+01 + 0.9457658850111219E+01 + 0.9459240769607529E+01 + 0.9460822692565124E+01 + 0.9462404619055501E+01 + 0.9463986549095511E+01 + 0.9465568482666754E+01 + 0.9467150419750352E+01 + 0.9468732360334380E+01 + 0.9470314304417675E+01 + 0.9471896252000001E+01 + 0.9473478203084486E+01 + 0.9475060157687697E+01 + 0.9476642115829566E+01 + 0.9478224077525114E+01 + 0.9479806042732287E+01 + 0.9481388011372216E+01 + 0.9482969983366742E+01 + 0.9484551958717528E+01 + 0.9486133937549942E+01 + 0.9487715919999999E+01 + 0.9489297906157610E+01 + 0.9490879895928311E+01 + 0.9492461889171544E+01 + 0.9494043885758739E+01 + 0.9495625885700703E+01 + 0.9497207889098160E+01 + 0.9498789896052053E+01 + 0.9500371906586070E+01 + 0.9501953920604166E+01 + 0.9503535938000001E+01 + 0.9505117958711814E+01 + 0.9506699982856169E+01 + 0.9508282010594204E+01 + 0.9509864042068529E+01 + 0.9511446077206255E+01 + 0.9513028115795477E+01 + 0.9514610157624590E+01 + 0.9516192202639013E+01 + 0.9517774251027568E+01 + 0.9519356303000000E+01 + 0.9520938358707980E+01 + 0.9522520418070805E+01 + 0.9524102480949685E+01 + 0.9525684547213741E+01 + 0.9527266616824061E+01 + 0.9528848689801057E+01 + 0.9530430766166328E+01 + 0.9532012845953240E+01 + 0.9533594929213406E+01 + 0.9535177016000000E+01 + 0.9536759106345325E+01 + 0.9538341200198140E+01 + 0.9539923297486324E+01 + 0.9541505398144935E+01 + 0.9543087502192522E+01 + 0.9544669609701495E+01 + 0.9546251720744339E+01 + 0.9547833835344507E+01 + 0.9549415953449428E+01 + 0.9550998075000001E+01 + 0.9552580199947153E+01 + 0.9554162328281961E+01 + 0.9555744460005551E+01 + 0.9557326595121676E+01 + 0.9558908733664824E+01 + 0.9560490875689299E+01 + 0.9562073021249045E+01 + 0.9563655170356414E+01 + 0.9565237322959286E+01 + 0.9566819478999999E+01 + 0.9568401638432839E+01 + 0.9569983801259875E+01 + 0.9571565967495115E+01 + 0.9573148137151968E+01 + 0.9574730310236706E+01 + 0.9576312486751014E+01 + 0.9577894666696370E+01 + 0.9579476850066072E+01 + 0.9581059036840765E+01 + 0.9582641227000000E+01 + 0.9584223420540104E+01 + 0.9585805617524484E+01 + 0.9587387818033319E+01 + 0.9588970022136000E+01 + 0.9590552229776513E+01 + 0.9592134440817938E+01 + 0.9593716655123771E+01 + 0.9595298872663879E+01 + 0.9596881093572986E+01 + 0.9598463318000000E+01 + 0.9600045546046790E+01 + 0.9601627777627030E+01 + 0.9603210012607365E+01 + 0.9604792250864001E+01 + 0.9606374492384473E+01 + 0.9607956737228125E+01 + 0.9609538985455453E+01 + 0.9611121237124236E+01 + 0.9612703492288020E+01 + 0.9614285751000001E+01 + 0.9615868013285947E+01 + 0.9617450279061979E+01 + 0.9619032548216794E+01 + 0.9620614820647941E+01 + 0.9622197096355921E+01 + 0.9623779375407636E+01 + 0.9625361657870693E+01 + 0.9626943943787961E+01 + 0.9628526233163980E+01 + 0.9630108526000003E+01 + 0.9631690822284897E+01 + 0.9633273121958041E+01 + 0.9634855424946432E+01 + 0.9636437731187034E+01 + 0.9638020040732632E+01 + 0.9639602353710734E+01 + 0.9641184670248578E+01 + 0.9642766990381990E+01 + 0.9644349314005138E+01 + 0.9645931641000001E+01 + 0.9647513971271449E+01 + 0.9649096304815922E+01 + 0.9650678641652750E+01 + 0.9652260981802323E+01 + 0.9653843325297288E+01 + 0.9655425672178208E+01 + 0.9657008022485394E+01 + 0.9658590376236651E+01 + 0.9660172733414886E+01 + 0.9661755094000000E+01 + 0.9663337457981868E+01 + 0.9664919825390207E+01 + 0.9666502196264714E+01 + 0.9668084570636264E+01 + 0.9669666948433358E+01 + 0.9671249329518435E+01 + 0.9672831713754867E+01 + 0.9674414101128111E+01 + 0.9675996491812837E+01 + 0.9677578885999999E+01 + 0.9679161283825529E+01 + 0.9680743685205304E+01 + 0.9682326090000180E+01 + 0.9683908498079941E+01 + 0.9685490909418144E+01 + 0.9687073324055282E+01 + 0.9688655742032546E+01 + 0.9690238163365594E+01 + 0.9691820588030518E+01 + 0.9693403016000001E+01 + 0.9694985447262553E+01 + 0.9696567881869997E+01 + 0.9698150319889974E+01 + 0.9699732761382778E+01 + 0.9701315206323216E+01 + 0.9702897654630935E+01 + 0.9704480106225768E+01 + 0.9706062561092974E+01 + 0.9707645019319246E+01 + 0.9709227480999999E+01 + 0.9710809946191683E+01 + 0.9712392414794865E+01 + 0.9713974886671140E+01 + 0.9715557361695581E+01 + 0.9717139839899721E+01 + 0.9718722321416063E+01 + 0.9720304806377500E+01 + 0.9721887294839705E+01 + 0.9723469786738647E+01 + 0.9725052282000000E+01 + 0.9726634780562016E+01 + 0.9728217282413235E+01 + 0.9729799787554777E+01 + 0.9731382295991153E+01 + 0.9732964807766338E+01 + 0.9734547322949760E+01 + 0.9736129841610108E+01 + 0.9737712363746303E+01 + 0.9739294889249111E+01 + 0.9740877418000000E+01 + 0.9742459949913570E+01 + 0.9744042485036971E+01 + 0.9745625023450485E+01 + 0.9747207565228424E+01 + 0.9748790110375708E+01 + 0.9750372658852482E+01 + 0.9751955210618906E+01 + 0.9753537765680585E+01 + 0.9755120324113578E+01 + 0.9756702886000001E+01 + 0.9758285451387305E+01 + 0.9759868020184291E+01 + 0.9761450592265085E+01 + 0.9763033167514850E+01 + 0.9764615745946882E+01 + 0.9766198327657159E+01 + 0.9767780912741808E+01 + 0.9769363501223284E+01 + 0.9770946093009865E+01 + 0.9772528688000000E+01 + 0.9774111286133541E+01 + 0.9775693887515930E+01 + 0.9777276492294002E+01 + 0.9778859100599355E+01 + 0.9780441712386402E+01 + 0.9782024327495240E+01 + 0.9783606945766149E+01 + 0.9785189567164670E+01 + 0.9786772191850492E+01 + 0.9788354820000000E+01 + 0.9789937451723567E+01 + 0.9791520086867458E+01 + 0.9793102725211924E+01 + 0.9794685366558756E+01 + 0.9796268010960269E+01 + 0.9797850658630390E+01 + 0.9799433309783408E+01 + 0.9801015964493860E+01 + 0.9802598622619637E+01 + 0.9804181284000000E+01 + 0.9805763948518054E+01 + 0.9807346616232293E+01 + 0.9808929287245054E+01 + 0.9810511961649343E+01 + 0.9812094639429700E+01 + 0.9813677320500672E+01 + 0.9815260004776688E+01 + 0.9816842692234669E+01 + 0.9818425382948401E+01 + 0.9820008077000002E+01 + 0.9821590774444591E+01 + 0.9823173475229311E+01 + 0.9824756179274299E+01 + 0.9826338886507369E+01 + 0.9827921596945396E+01 + 0.9829504310662740E+01 + 0.9831087027733876E+01 + 0.9832669748183394E+01 + 0.9834252471958564E+01 + 0.9835835199000000E+01 + 0.9837417929258255E+01 + 0.9839000662723619E+01 + 0.9840583399396319E+01 + 0.9842166139279462E+01 + 0.9843748882409585E+01 + 0.9845331628844809E+01 + 0.9846914378642799E+01 + 0.9848497131812858E+01 + 0.9850079888289301E+01 + 0.9851662648000000E+01 + 0.9853245410896189E+01 + 0.9854828177022547E+01 + 0.9856410946447117E+01 + 0.9857993719232693E+01 + 0.9859576495381194E+01 + 0.9861159274855236E+01 + 0.9862742057616536E+01 + 0.9864324843612051E+01 + 0.9865907632765840E+01 + 0.9867490425000000E+01 + 0.9869073220280880E+01 + 0.9870656018751889E+01 + 0.9872238820600682E+01 + 0.9873821625996433E+01 + 0.9875404434893381E+01 + 0.9876987247107095E+01 + 0.9878570062452438E+01 + 0.9880152880840585E+01 + 0.9881735702332005E+01 + 0.9883318527000002E+01 + 0.9884901354914916E+01 + 0.9886484186135233E+01 + 0.9888067020716459E+01 + 0.9889649858704788E+01 + 0.9891232700037971E+01 + 0.9892815544583817E+01 + 0.9894398392210734E+01 + 0.9895981242893537E+01 + 0.9897564096771982E+01 + 0.9899146954000001E+01 + 0.9900729814679481E+01 + 0.9902312678704085E+01 + 0.9903895545915431E+01 + 0.9905478416170633E+01 + 0.9907061289507068E+01 + 0.9908644166078416E+01 + 0.9910227046038463E+01 + 0.9911809929431490E+01 + 0.9913392816132024E+01 + 0.9914975706000000E+01 + 0.9916558598932136E+01 + 0.9918141494972304E+01 + 0.9919724394201172E+01 + 0.9921307296694398E+01 + 0.9922890202469526E+01 + 0.9924473111506597E+01 + 0.9926056023785161E+01 + 0.9927638939293022E+01 + 0.9929221858030743E+01 + 0.9930804780000001E+01 + 0.9932387705204501E+01 + 0.9933970633656109E+01 + 0.9935553565368723E+01 + 0.9937136500352729E+01 + 0.9938719438577655E+01 + 0.9940302379986669E+01 + 0.9941885324523184E+01 + 0.9943468272171515E+01 + 0.9945051222979396E+01 + 0.9946634177000002E+01 + 0.9948217134278742E+01 + 0.9949800094829941E+01 + 0.9951383058660136E+01 + 0.9952966025771639E+01 + 0.9954548996117429E+01 + 0.9956131969618671E+01 + 0.9957714946197404E+01 + 0.9959297925860220E+01 + 0.9960880908744777E+01 + 0.9962463895000001E+01 + 0.9964046884717947E+01 + 0.9965629877763140E+01 + 0.9967212873943238E+01 + 0.9968795873082023E+01 + 0.9970378875190903E+01 + 0.9971961880402336E+01 + 0.9973544888849824E+01 + 0.9975127900609104E+01 + 0.9976710915666338E+01 + 0.9978293934000000E+01 + 0.9979876955584084E+01 + 0.9981459980374719E+01 + 0.9983043008323577E+01 + 0.9984626039387315E+01 + 0.9986209073580701E+01 + 0.9987792110955981E+01 + 0.9989375151565699E+01 + 0.9990958195442383E+01 + 0.9992541242587535E+01 + 0.9994124293000001E+01 + 0.9995707346643773E+01 + 0.9997290403343467E+01 + 0.9998873462888840E+01 + 0.1000045652510563E+02 + 0.1000203959023767E+02 + 0.1000362265879860E+02 + 0.1000520573129881E+02 + 0.1000678880778714E+02 + 0.1000837188759693E+02 + 0.1000995497000000E+02 + 0.1001153805451864E+02 + 0.1001312114167701E+02 + 0.1001470423224977E+02 + 0.1001628732693626E+02 + 0.1001787042556031E+02 + 0.1001945352738094E+02 + 0.1002103663165612E+02 + 0.1002261973814656E+02 + 0.1002420284739220E+02 + 0.1002578596000000E+02 + 0.1002736907646620E+02 + 0.1002895219684406E+02 + 0.1003053532107610E+02 + 0.1003211844908908E+02 + 0.1003370158062625E+02 + 0.1003528471531252E+02 + 0.1003686785277282E+02 + 0.1003845099275164E+02 + 0.1004003413517878E+02 + 0.1004161728000000E+02 + 0.1004320042726910E+02 + 0.1004478357747208E+02 + 0.1004636673120302E+02 + 0.1004794988899198E+02 + 0.1004953305062497E+02 + 0.1005111621540798E+02 + 0.1005269938264701E+02 + 0.1005428255212804E+02 + 0.1005586572438105E+02 + 0.1005744890000000E+02 + 0.1005903207947091E+02 + 0.1006061526284785E+02 + 0.1006219845007693E+02 + 0.1006378164108821E+02 + 0.1006536483562551E+02 + 0.1006694803331244E+02 + 0.1006853123377264E+02 + 0.1007011443675039E+02 + 0.1007169764217704E+02 + 0.1007328085000000E+02 + 0.1007486406027356E+02 + 0.1007644727347956E+02 + 0.1007803049020672E+02 + 0.1007961371098098E+02 + 0.1008119693559866E+02 + 0.1008278016338530E+02 + 0.1008436339366605E+02 + 0.1008594662621148E+02 + 0.1008752986148266E+02 + 0.1008911310000000E+02 + 0.1009069634223398E+02 + 0.1009227958845510E+02 + 0.1009386283888391E+02 + 0.1009544609366078E+02 + 0.1009702935199432E+02 + 0.1009861261249194E+02 + 0.1010019587377301E+02 + 0.1010177913577256E+02 + 0.1010336240046495E+02 + 0.1010494567000000E+02 + 0.1010652894577976E+02 + 0.1010811222621535E+02 + 0.1010969550897019E+02 + 0.1011127879193845E+02 + 0.1011286207569706E+02 + 0.1011444536255379E+02 + 0.1011602865481755E+02 + 0.1011761195313561E+02 + 0.1011919525557970E+02 + 0.1012077856000000E+02 + 0.1012236186483879E+02 + 0.1012394517090663E+02 + 0.1012552847960621E+02 + 0.1012711179226000E+02 + 0.1012869510925849E+02 + 0.1013027843039087E+02 + 0.1013186175543445E+02 + 0.1013344508405602E+02 + 0.1013502841575098E+02 + 0.1013661175000000E+02 + 0.1013819508648335E+02 + 0.1013977842567957E+02 + 0.1014136176826682E+02 + 0.1014294511486142E+02 + 0.1014452846536136E+02 + 0.1014611181920112E+02 + 0.1014769517581097E+02 + 0.1014927853483157E+02 + 0.1015086189622965E+02 + 0.1015244526000000E+02 + 0.1015402862623730E+02 + 0.1015561199543573E+02 + 0.1015719536818939E+02 + 0.1015877874502591E+02 + 0.1016036212570072E+02 + 0.1016194550947102E+02 + 0.1016352889559519E+02 + 0.1016511228390258E+02 + 0.1016669567510740E+02 + 0.1016827907000000E+02 + 0.1016986246910730E+02 + 0.1017144587190244E+02 + 0.1017302927759513E+02 + 0.1017461268547119E+02 + 0.1017619609570113E+02 + 0.1017777950902626E+02 + 0.1017936292618910E+02 + 0.1018094634743446E+02 + 0.1018252977223575E+02 + 0.1018411320000000E+02 + 0.1018569663023325E+02 + 0.1018728006283754E+02 + 0.1018886349781390E+02 + 0.1019044693519241E+02 + 0.1019203037534054E+02 + 0.1019361381884348E+02 + 0.1019519726628187E+02 + 0.1019678071774556E+02 + 0.1019836417256370E+02 + 0.1019994763000000E+02 + 0.1020153108956362E+02 + 0.1020311455174545E+02 + 0.1020469801728182E+02 + 0.1020628148684363E+02 + 0.1020786496034088E+02 + 0.1020944843719270E+02 + 0.1021103191681366E+02 + 0.1021261539883647E+02 + 0.1021419888323195E+02 + 0.1021578237000000E+02 + 0.1021736585923879E+02 + 0.1021894935143950E+02 + 0.1022053284719157E+02 + 0.1022211634701892E+02 + 0.1022369985068358E+02 + 0.1022528335745606E+02 + 0.1022686686660782E+02 + 0.1022845037795806E+02 + 0.1023003389217502E+02 + 0.1023161741000000E+02 + 0.1023320093194947E+02 + 0.1023478445764079E+02 + 0.1023636798646654E+02 + 0.1023795151785265E+02 + 0.1023953505161307E+02 + 0.1024111858781209E+02 + 0.1024270212651977E+02 + 0.1024428566790443E+02 + 0.1024586921228662E+02 + 0.1024745276000000E+02 + 0.1024903631135876E+02 + 0.1025061986659931E+02 + 0.1025220342593858E+02 + 0.1025378698952348E+02 + 0.1025537055668666E+02 + 0.1025695412623544E+02 + 0.1025853769698415E+02 + 0.1026012126869160E+02 + 0.1026170484258064E+02 + 0.1026328842000000E+02 + 0.1026487200191473E+02 + 0.1026645558775494E+02 + 0.1026803917656704E+02 + 0.1026962276748627E+02 + 0.1027120636068080E+02 + 0.1027278995698515E+02 + 0.1027437355723475E+02 + 0.1027595716165221E+02 + 0.1027754076951028E+02 + 0.1027912438000000E+02 + 0.1028070799257562E+02 + 0.1028229160774411E+02 + 0.1028387522627568E+02 + 0.1028545884887028E+02 + 0.1028704247541156E+02 + 0.1028862610525652E+02 + 0.1029020973775874E+02 + 0.1029179337259355E+02 + 0.1029337700993498E+02 + 0.1029496065000000E+02 + 0.1029654429293338E+02 + 0.1029812793859128E+02 + 0.1029971158675773E+02 + 0.1030129523725934E+02 + 0.1030287889041818E+02 + 0.1030446254687592E+02 + 0.1030604620727097E+02 + 0.1030762987172350E+02 + 0.1030921353955053E+02 + 0.1031079721000000E+02 + 0.1031238088256872E+02 + 0.1031396455774908E+02 + 0.1031554823628236E+02 + 0.1031713191884395E+02 + 0.1031871560534324E+02 + 0.1032029929519539E+02 + 0.1032188298781109E+02 + 0.1032346668282471E+02 + 0.1032505038021736E+02 + 0.1032663408000000E+02 + 0.1032821778227329E+02 + 0.1032980148749679E+02 + 0.1033138519621975E+02 + 0.1033296890893529E+02 + 0.1033455262548362E+02 + 0.1033613634528375E+02 + 0.1033772006775240E+02 + 0.1033930379259182E+02 + 0.1034088751994675E+02 + 0.1034247125000000E+02 + 0.1034405498288004E+02 + 0.1034563871849799E+02 + 0.1034722245671062E+02 + 0.1034880619740104E+02 + 0.1035038994075852E+02 + 0.1035197368716987E+02 + 0.1035355743702402E+02 + 0.1035514119064057E+02 + 0.1035672494823161E+02 + 0.1035830871000000E+02 + 0.1035989247591452E+02 + 0.1036147624500774E+02 + 0.1036306001607816E+02 + 0.1036464378805091E+02 + 0.1036622756132346E+02 + 0.1036781133724312E+02 + 0.1036939511715838E+02 + 0.1037097890153840E+02 + 0.1037256268948931E+02 + 0.1037414648000000E+02 + 0.1037573027240478E+02 + 0.1037731406741950E+02 + 0.1037889786610544E+02 + 0.1038048166939173E+02 + 0.1038206547667178E+02 + 0.1038364928634815E+02 + 0.1038523309683015E+02 + 0.1038681690792282E+02 + 0.1038840072159460E+02 + 0.1038998454000000E+02 + 0.1039156836457710E+02 + 0.1039315219389820E+02 + 0.1039473602581918E+02 + 0.1039631985837893E+02 + 0.1039790369174393E+02 + 0.1039948752745330E+02 + 0.1040107136705407E+02 + 0.1040265521119479E+02 + 0.1040423905913140E+02 + 0.1040582291000000E+02 + 0.1040740676312629E+02 + 0.1040899061859421E+02 + 0.1041057447667725E+02 + 0.1041215833762403E+02 + 0.1041374220139408E+02 + 0.1041532606776040E+02 + 0.1041690993649827E+02 + 0.1041849380770786E+02 + 0.1042007768199278E+02 + 0.1042166156000000E+02 + 0.1042324544214568E+02 + 0.1042482932792293E+02 + 0.1042641321659404E+02 + 0.1042799710749156E+02 + 0.1042958100076399E+02 + 0.1043116489708635E+02 + 0.1043274879713587E+02 + 0.1043433270119672E+02 + 0.1043591660894391E+02 + 0.1043750052000000E+02 + 0.1043908443391815E+02 + 0.1044066834997368E+02 + 0.1044225226737248E+02 + 0.1044383618545516E+02 + 0.1044542010512837E+02 + 0.1044700402830916E+02 + 0.1044858795690660E+02 + 0.1045017189134266E+02 + 0.1045175582973425E+02 + 0.1045333977000000E+02 + 0.1045492371066072E+02 + 0.1045650765264582E+02 + 0.1045809159748692E+02 + 0.1045967554660021E+02 + 0.1046125950006052E+02 + 0.1046284345707725E+02 + 0.1046442741685080E+02 + 0.1046601137890504E+02 + 0.1046759534326529E+02 + 0.1046917931000000E+02 + 0.1047076327925475E+02 + 0.1047234725148361E+02 + 0.1047393122721782E+02 + 0.1047551520693403E+02 + 0.1047709919047485E+02 + 0.1047868317727377E+02 + 0.1048026716676192E+02 + 0.1048185115863533E+02 + 0.1048343515300068E+02 + 0.1048501915000000E+02 + 0.1048660314975249E+02 + 0.1048818715228622E+02 + 0.1048977115760646E+02 + 0.1049135516571014E+02 + 0.1049293917649760E+02 + 0.1049452318980678E+02 + 0.1049610720547962E+02 + 0.1049769122365808E+02 + 0.1049927524494919E+02 + 0.1050085927000000E+02 + 0.1050244329921553E+02 + 0.1050402733203270E+02 + 0.1050561136764645E+02 + 0.1050719540533850E+02 + 0.1050877944540006E+02 + 0.1051036348877358E+02 + 0.1051194753639791E+02 + 0.1051353158834470E+02 + 0.1051511564334145E+02 + 0.1051669970000000E+02 + 0.1051828375739013E+02 + 0.1051986781641318E+02 + 0.1052145187842840E+02 + 0.1052303594468798E+02 + 0.1052462001519944E+02 + 0.1052620408916731E+02 + 0.1052778816578928E+02 + 0.1052937224465756E+02 + 0.1053095632597573E+02 + 0.1053254041000000E+02 + 0.1053412449690788E+02 + 0.1053570858656211E+02 + 0.1053729267874678E+02 + 0.1053887677328662E+02 + 0.1054046087047908E+02 + 0.1054204497092660E+02 + 0.1054362907522930E+02 + 0.1054521318354221E+02 + 0.1054679729533050E+02 + 0.1054838141000000E+02 + 0.1054996552708042E+02 + 0.1055154964659704E+02 + 0.1055313376869903E+02 + 0.1055471789352807E+02 + 0.1055630202113877E+02 + 0.1055788615152955E+02 + 0.1055947028469708E+02 + 0.1056105442058739E+02 + 0.1056263855906808E+02 + 0.1056422270000000E+02 + 0.1056580684336038E+02 + 0.1056739098959194E+02 + 0.1056897513925379E+02 + 0.1057055929285387E+02 + 0.1057214345030513E+02 + 0.1057372761113670E+02 + 0.1057531177487258E+02 + 0.1057689594111354E+02 + 0.1057848010957935E+02 + 0.1636668203238487E+01 + 0.1635986779127041E+01 + 0.1635305462925995E+01 + 0.1634624254707197E+01 + 0.1633943154542494E+01 + 0.1633262162503734E+01 + 0.1632581278662764E+01 + 0.1631900503091431E+01 + 0.1631219835861583E+01 + 0.1630539277045068E+01 + 0.1629858826713733E+01 + 0.1629178484939425E+01 + 0.1628498251793992E+01 + 0.1627818127349281E+01 + 0.1627138111677140E+01 + 0.1626458204849416E+01 + 0.1625778406937956E+01 + 0.1625098718014609E+01 + 0.1624419138151221E+01 + 0.1623739667419640E+01 + 0.1623060305891713E+01 + 0.1622381053639288E+01 + 0.1621701910734213E+01 + 0.1621022877248334E+01 + 0.1620343953253500E+01 + 0.1619665138821557E+01 + 0.1618986434024353E+01 + 0.1618307838933736E+01 + 0.1617629353621553E+01 + 0.1616950978159651E+01 + 0.1616272712619878E+01 + 0.1615594557074081E+01 + 0.1614916511594108E+01 + 0.1614238576251807E+01 + 0.1613560751119024E+01 + 0.1612883036267607E+01 + 0.1612205431769404E+01 + 0.1611527937696262E+01 + 0.1610850554120028E+01 + 0.1610173281112550E+01 + 0.1609496118745676E+01 + 0.1608819067091252E+01 + 0.1608142126221127E+01 + 0.1607465296207147E+01 + 0.1606788577121161E+01 + 0.1606111969035015E+01 + 0.1605435472020558E+01 + 0.1604759086149636E+01 + 0.1604082811494096E+01 + 0.1603406648125788E+01 + 0.1602730596116557E+01 + 0.1602054655538251E+01 + 0.1601378826462719E+01 + 0.1600703108961806E+01 + 0.1600027503107361E+01 + 0.1599352008971231E+01 + 0.1598676626625264E+01 + 0.1598001356141307E+01 + 0.1597326197591208E+01 + 0.1596651151046813E+01 + 0.1595976216579970E+01 + 0.1595301394262528E+01 + 0.1594626684166333E+01 + 0.1593952086363232E+01 + 0.1593277600925074E+01 + 0.1592603227923705E+01 + 0.1591928967430973E+01 + 0.1591254819518726E+01 + 0.1590580784258810E+01 + 0.1589906861723075E+01 + 0.1589233051983366E+01 + 0.1588559355111531E+01 + 0.1587885771179418E+01 + 0.1587212300258875E+01 + 0.1586538942421747E+01 + 0.1585865697739885E+01 + 0.1585192566285133E+01 + 0.1584519548129341E+01 + 0.1583846643344355E+01 + 0.1583173852002023E+01 + 0.1582501174174192E+01 + 0.1581828609932710E+01 + 0.1581156159349425E+01 + 0.1580483822496183E+01 + 0.1579811599444832E+01 + 0.1579139490267220E+01 + 0.1578467495035194E+01 + 0.1577795613820602E+01 + 0.1577123846695290E+01 + 0.1576452193731107E+01 + 0.1575780654999900E+01 + 0.1575109230573515E+01 + 0.1574437920523802E+01 + 0.1573766724922607E+01 + 0.1573095643841778E+01 + 0.1572424677353161E+01 + 0.1571753825528606E+01 + 0.1571083088439958E+01 + 0.1570412466159065E+01 + 0.1569741958757776E+01 + 0.1569071566307937E+01 + 0.1568401288881395E+01 + 0.1567731126549999E+01 + 0.1567061079385596E+01 + 0.1566391147460033E+01 + 0.1565721330845157E+01 + 0.1565051629612817E+01 + 0.1564382043834858E+01 + 0.1563712573583130E+01 + 0.1563043218929479E+01 + 0.1562373979945753E+01 + 0.1561704856703800E+01 + 0.1561035849275466E+01 + 0.1560366957732599E+01 + 0.1559698182147047E+01 + 0.1559029522590657E+01 + 0.1558360979135277E+01 + 0.1557692551852753E+01 + 0.1557024240814934E+01 + 0.1556356046093667E+01 + 0.1555687967760799E+01 + 0.1555020005888178E+01 + 0.1554352160547651E+01 + 0.1553684431811066E+01 + 0.1553016819750270E+01 + 0.1552349324437111E+01 + 0.1551681945943435E+01 + 0.1551014684341092E+01 + 0.1550347539701926E+01 + 0.1549680512097788E+01 + 0.1549013601600523E+01 + 0.1548346808281980E+01 + 0.1547680132214005E+01 + 0.1547013573468446E+01 + 0.1546347132117151E+01 + 0.1545680808231967E+01 + 0.1545014601884742E+01 + 0.1544348513147322E+01 + 0.1543682542091557E+01 + 0.1543016688789292E+01 + 0.1542350953312375E+01 + 0.1541685335732654E+01 + 0.1541019836121976E+01 + 0.1540354454552189E+01 + 0.1539689191095140E+01 + 0.1539024045822676E+01 + 0.1538359018806646E+01 + 0.1537694110118896E+01 + 0.1537029319831274E+01 + 0.1536364648015627E+01 + 0.1535700094743804E+01 + 0.1535035660087650E+01 + 0.1534371344119014E+01 + 0.1533707146909744E+01 + 0.1533043068531685E+01 + 0.1532379109056687E+01 + 0.1531715268556597E+01 + 0.1531051547103261E+01 + 0.1530387944768528E+01 + 0.1529724461624245E+01 + 0.1529061097742259E+01 + 0.1528397853194418E+01 + 0.1527734728052569E+01 + 0.1527071722388559E+01 + 0.1526408836274237E+01 + 0.1525746069781449E+01 + 0.1525083422982044E+01 + 0.1524420895947868E+01 + 0.1523758488750768E+01 + 0.1523096201462593E+01 + 0.1522434034155190E+01 + 0.1521771986900406E+01 + 0.1521110059770089E+01 + 0.1520448252836086E+01 + 0.1519786566170245E+01 + 0.1519124999844412E+01 + 0.1518463553930436E+01 + 0.1517802228500164E+01 + 0.1517141023625444E+01 + 0.1516479939378122E+01 + 0.1515818975830047E+01 + 0.1515158133053065E+01 + 0.1514497411119025E+01 + 0.1513836810099773E+01 + 0.1513176330067157E+01 + 0.1512515971093025E+01 + 0.1511855733249224E+01 + 0.1511195616607601E+01 + 0.1510535621240004E+01 + 0.1509875747218281E+01 + 0.1509215994614278E+01 + 0.1508556363499844E+01 + 0.1507896853946825E+01 + 0.1507237466027069E+01 + 0.1506578199812424E+01 + 0.1505919055374737E+01 + 0.1505260032785856E+01 + 0.1504601132117627E+01 + 0.1503942353441899E+01 + 0.1503283696830519E+01 + 0.1502625162355334E+01 + 0.1501966750088192E+01 + 0.1501308460100939E+01 + 0.1500650292465425E+01 + 0.1499992247253496E+01 + 0.1499334324536999E+01 + 0.1498676524387782E+01 + 0.1498018846877693E+01 + 0.1497361292078578E+01 + 0.1496703860062286E+01 + 0.1496046550900663E+01 + 0.1495389364665558E+01 + 0.1494732301428817E+01 + 0.1494075361262289E+01 + 0.1493418544237820E+01 + 0.1492761850427258E+01 + 0.1492105279902451E+01 + 0.1491448832735246E+01 + 0.1490792508997490E+01 + 0.1490136308761031E+01 + 0.1489480232097716E+01 + 0.1488824279079392E+01 + 0.1488168449777908E+01 + 0.1487512744265111E+01 + 0.1486857162612848E+01 + 0.1486201704892966E+01 + 0.1485546371177313E+01 + 0.1484891161537736E+01 + 0.1484236076046084E+01 + 0.1483581114774203E+01 + 0.1482926277793940E+01 + 0.1482271565177144E+01 + 0.1481616976995661E+01 + 0.1480962513321340E+01 + 0.1480308174226027E+01 + 0.1479653959781570E+01 + 0.1478999870059817E+01 + 0.1478345905132614E+01 + 0.1477692065071810E+01 + 0.1477038349949252E+01 + 0.1476384759836787E+01 + 0.1475731294806263E+01 + 0.1475077954929526E+01 + 0.1474424740278426E+01 + 0.1473771650924808E+01 + 0.1473118686940521E+01 + 0.1472465848397412E+01 + 0.1471813135367329E+01 + 0.1471160547922118E+01 + 0.1470508086133628E+01 + 0.1469855750073705E+01 + 0.1469203539814197E+01 + 0.1468551455426952E+01 + 0.1467899496983818E+01 + 0.1467247664556640E+01 + 0.1466595958217268E+01 + 0.1465944378037549E+01 + 0.1465292924089329E+01 + 0.1464641596444456E+01 + 0.1463990395174779E+01 + 0.1463339320352143E+01 + 0.1462688372048398E+01 + 0.1462037550335389E+01 + 0.1461386855284965E+01 + 0.1460736286968973E+01 + 0.1460085845459261E+01 + 0.1459435530827675E+01 + 0.1458785343146064E+01 + 0.1458135282486275E+01 + 0.1457485348920155E+01 + 0.1456835542519552E+01 + 0.1456185863356313E+01 + 0.1455536311502286E+01 + 0.1454886887029318E+01 + 0.1454237590009256E+01 + 0.1453588420513948E+01 + 0.1452939378615242E+01 + 0.1452290464384984E+01 + 0.1451641677895023E+01 + 0.1450993019217206E+01 + 0.1450344488423380E+01 + 0.1449696085585393E+01 + 0.1449047810775092E+01 + 0.1448399664064324E+01 + 0.1447751645524938E+01 + 0.1447103755228779E+01 + 0.1446455993247697E+01 + 0.1445808359653539E+01 + 0.1445160854518151E+01 + 0.1444513477913381E+01 + 0.1443866229911077E+01 + 0.1443219110583087E+01 + 0.1442572120001256E+01 + 0.1441925258237435E+01 + 0.1441278525363468E+01 + 0.1440631921451205E+01 + 0.1439985446572492E+01 + 0.1439339100799177E+01 + 0.1438692884203107E+01 + 0.1438046796856130E+01 + 0.1437400838830093E+01 + 0.1436755010196844E+01 + 0.1436109311028230E+01 + 0.1435463741396098E+01 + 0.1434818301372297E+01 + 0.1434172991028673E+01 + 0.1433527810437074E+01 + 0.1432882759669347E+01 + 0.1432237838797340E+01 + 0.1431593047892901E+01 + 0.1430948387027876E+01 + 0.1430303856274113E+01 + 0.1429659455703460E+01 + 0.1429015185387764E+01 + 0.1428371045398873E+01 + 0.1427727035808633E+01 + 0.1427083156688893E+01 + 0.1426439408111500E+01 + 0.1425795790148301E+01 + 0.1425152302871144E+01 + 0.1424508946351876E+01 + 0.1423865720662345E+01 + 0.1423222625874398E+01 + 0.1422579662059883E+01 + 0.1421936829290646E+01 + 0.1421294127638536E+01 + 0.1420651557175400E+01 + 0.1420009117973085E+01 + 0.1419366810103439E+01 + 0.1418724633638310E+01 + 0.1418082588649543E+01 + 0.1417440675208989E+01 + 0.1416798893388492E+01 + 0.1416157243259902E+01 + 0.1415515724895065E+01 + 0.1414874338365830E+01 + 0.1414233083744042E+01 + 0.1413591961101551E+01 + 0.1412950970510203E+01 + 0.1412310112041846E+01 + 0.1411669385768326E+01 + 0.1411028791761493E+01 + 0.1410388330093192E+01 + 0.1409748000835273E+01 + 0.1409107804059581E+01 + 0.1408467739837964E+01 + 0.1407827808242271E+01 + 0.1407188009344348E+01 + 0.1406548343216042E+01 + 0.1405908809929202E+01 + 0.1405269409555675E+01 + 0.1404630142167308E+01 + 0.1403991007835948E+01 + 0.1403352006633443E+01 + 0.1402713138631641E+01 + 0.1402074403902389E+01 + 0.1401435802517534E+01 + 0.1400797334548924E+01 + 0.1400159000068407E+01 + 0.1399520799147829E+01 + 0.1398882731859038E+01 + 0.1398244798273882E+01 + 0.1397606998464208E+01 + 0.1396969332501864E+01 + 0.1396331800458696E+01 + 0.1395694402406553E+01 + 0.1395057138417282E+01 + 0.1394420008562730E+01 + 0.1393783012914745E+01 + 0.1393146151545174E+01 + 0.1392509424525865E+01 + 0.1391872831928666E+01 + 0.1391236373825422E+01 + 0.1390600050287983E+01 + 0.1389963861388195E+01 + 0.1389327807197906E+01 + 0.1388691887788964E+01 + 0.1388056103233215E+01 + 0.1387420453602508E+01 + 0.1386784938968689E+01 + 0.1386149559403607E+01 + 0.1385514314979108E+01 + 0.1384879205767040E+01 + 0.1384244231839251E+01 + 0.1383609393267588E+01 + 0.1382974690123898E+01 + 0.1382340122480029E+01 + 0.1381705690407828E+01 + 0.1381071393979143E+01 + 0.1380437233265822E+01 + 0.1379803208339711E+01 + 0.1379169319272658E+01 + 0.1378535566136511E+01 + 0.1377901949003117E+01 + 0.1377268467944323E+01 + 0.1376635123031977E+01 + 0.1376001914337927E+01 + 0.1375368841934019E+01 + 0.1374735905892102E+01 + 0.1374103106284022E+01 + 0.1373470443181627E+01 + 0.1372837916656766E+01 + 0.1372205526781284E+01 + 0.1371573273627029E+01 + 0.1370941157265850E+01 + 0.1370309177769594E+01 + 0.1369677335210106E+01 + 0.1369045629659237E+01 + 0.1368414061188832E+01 + 0.1367782629870739E+01 + 0.1367151335776806E+01 + 0.1366520178978880E+01 + 0.1365889159548809E+01 + 0.1365258277558439E+01 + 0.1364627533079619E+01 + 0.1363996926184196E+01 + 0.1363366456944018E+01 + 0.1362736125430931E+01 + 0.1362105931716783E+01 + 0.1361475875873422E+01 + 0.1360845957972696E+01 + 0.1360216178086451E+01 + 0.1359586536286535E+01 + 0.1358957032644795E+01 + 0.1358327667233080E+01 + 0.1357698440123236E+01 + 0.1357069351387110E+01 + 0.1356440401096551E+01 + 0.1355811589323406E+01 + 0.1355182916139522E+01 + 0.1354554381616747E+01 + 0.1353925985826927E+01 + 0.1353297728841912E+01 + 0.1352669610733547E+01 + 0.1352041631573680E+01 + 0.1351413791434160E+01 + 0.1350786090386833E+01 + 0.1350158528503547E+01 + 0.1349531105856149E+01 + 0.1348903822516486E+01 + 0.1348276678556407E+01 + 0.1347649674047759E+01 + 0.1347022809062388E+01 + 0.1346396083672143E+01 + 0.1345769497948871E+01 + 0.1345143051964419E+01 + 0.1344516745790636E+01 + 0.1343890579499367E+01 + 0.1343264553162461E+01 + 0.1342638666851766E+01 + 0.1342012920639128E+01 + 0.1341387314596395E+01 + 0.1340761848795415E+01 + 0.1340136523308034E+01 + 0.1339511338206101E+01 + 0.1338886293561463E+01 + 0.1338261389445967E+01 + 0.1337636625931461E+01 + 0.1337012003089793E+01 + 0.1336387520992809E+01 + 0.1335763179712357E+01 + 0.1335138979320285E+01 + 0.1334514919888439E+01 + 0.1333891001488669E+01 + 0.1333267224192820E+01 + 0.1332643588072740E+01 + 0.1332020093200278E+01 + 0.1331396739647279E+01 + 0.1330773527485593E+01 + 0.1330150456787065E+01 + 0.1329527527623545E+01 + 0.1328904740066878E+01 + 0.1328282094188913E+01 + 0.1327659590061497E+01 + 0.1327037227756477E+01 + 0.1326415007345701E+01 + 0.1325792928901016E+01 + 0.1325170992494270E+01 + 0.1324549198197311E+01 + 0.1323927546081985E+01 + 0.1323306036220140E+01 + 0.1322684668683624E+01 + 0.1322063443544284E+01 + 0.1321442360873967E+01 + 0.1320821420744521E+01 + 0.1320200623227794E+01 + 0.1319579968395632E+01 + 0.1318959456319884E+01 + 0.1318339087072396E+01 + 0.1317718860725017E+01 + 0.1317098777349593E+01 + 0.1316478837017972E+01 + 0.1315859039802002E+01 + 0.1315239385773529E+01 + 0.1314619875004403E+01 + 0.1314000507566469E+01 + 0.1313381283531575E+01 + 0.1312762202971569E+01 + 0.1312143265958298E+01 + 0.1311524472563610E+01 + 0.1310905822859352E+01 + 0.1310287316917372E+01 + 0.1309668954809516E+01 + 0.1309050736607633E+01 + 0.1308432662383570E+01 + 0.1307814732209175E+01 + 0.1307196946156294E+01 + 0.1306579304296775E+01 + 0.1305961806702466E+01 + 0.1305344453445215E+01 + 0.1304727244596867E+01 + 0.1304110180229272E+01 + 0.1303493260414277E+01 + 0.1302876485223728E+01 + 0.1302259854729474E+01 + 0.1301643369003362E+01 + 0.1301027028117238E+01 + 0.1300410832142952E+01 + 0.1299794781152350E+01 + 0.1299178875217280E+01 + 0.1298563114409588E+01 + 0.1297947498801123E+01 + 0.1297332028463732E+01 + 0.1296716703469263E+01 + 0.1296101523889563E+01 + 0.1295486489796479E+01 + 0.1294871601261858E+01 + 0.1294256858357549E+01 + 0.1293642261155399E+01 + 0.1293027809727255E+01 + 0.1292413504144964E+01 + 0.1291799344480374E+01 + 0.1291185330805333E+01 + 0.1290571463191688E+01 + 0.1289957741711286E+01 + 0.1289344166435975E+01 + 0.1288730737437603E+01 + 0.1288117454788015E+01 + 0.1287504318559062E+01 + 0.1286891328822589E+01 + 0.1286278485650444E+01 + 0.1285665789114474E+01 + 0.1285053239286528E+01 + 0.1284440836238452E+01 + 0.1283828580042093E+01 + 0.1283216470769301E+01 + 0.1282604508491921E+01 + 0.1281992693281801E+01 + 0.1281381025210789E+01 + 0.1280769504350732E+01 + 0.1280158130773477E+01 + 0.1279546904550873E+01 + 0.1278935825754766E+01 + 0.1278324894457004E+01 + 0.1277714110729435E+01 + 0.1277103474643905E+01 + 0.1276492986272262E+01 + 0.1275882645686355E+01 + 0.1275272452958029E+01 + 0.1274662408159133E+01 + 0.1274052511361514E+01 + 0.1273442762637020E+01 + 0.1272833162057497E+01 + 0.1272223709694794E+01 + 0.1271614405620758E+01 + 0.1271005249907237E+01 + 0.1270396242626077E+01 + 0.1269787383849126E+01 + 0.1269178673648232E+01 + 0.1268570112095242E+01 + 0.1267961699262004E+01 + 0.1267353435220364E+01 + 0.1266745320042171E+01 + 0.1266137353799272E+01 + 0.1265529536563514E+01 + 0.1264921868406746E+01 + 0.1264314349400813E+01 + 0.1263706979617564E+01 + 0.1263099759128847E+01 + 0.1262492688006508E+01 + 0.1261885766322395E+01 + 0.1261278994148355E+01 + 0.1260672371556237E+01 + 0.1260065898617887E+01 + 0.1259459575405152E+01 + 0.1258853401989881E+01 + 0.1258247378443921E+01 + 0.1257641504839119E+01 + 0.1257035781247323E+01 + 0.1256430207740380E+01 + 0.1255824784390137E+01 + 0.1255219511268443E+01 + 0.1254614388447144E+01 + 0.1254009415998087E+01 + 0.1253404593993121E+01 + 0.1252799922504093E+01 + 0.1252195401602850E+01 + 0.1251591031361240E+01 + 0.1250986811851110E+01 + 0.1250382743144308E+01 + 0.1249778825312681E+01 + 0.1249175058428076E+01 + 0.1248571442562341E+01 + 0.1247967977787323E+01 + 0.1247364664174871E+01 + 0.1246761501796831E+01 + 0.1246158490725050E+01 + 0.1245555631031377E+01 + 0.1244952922787658E+01 + 0.1244350366065741E+01 + 0.1243747960937474E+01 + 0.1243145707474704E+01 + 0.1242543605749278E+01 + 0.1241941655833045E+01 + 0.1241339857797850E+01 + 0.1240738211715543E+01 + 0.1240136717657969E+01 + 0.1239535375696978E+01 + 0.1238934185904415E+01 + 0.1238333148352129E+01 + 0.1237732263111967E+01 + 0.1237131530255777E+01 + 0.1236530949855405E+01 + 0.1235930521982700E+01 + 0.1235330246709509E+01 + 0.1234730124107679E+01 + 0.1234130154249058E+01 + 0.1233530337205493E+01 + 0.1232930673048831E+01 + 0.1232331161850921E+01 + 0.1231731803683609E+01 + 0.1231132598618744E+01 + 0.1230533546728171E+01 + 0.1229934648083740E+01 + 0.1229335902757297E+01 + 0.1228737310820689E+01 + 0.1228138872345765E+01 + 0.1227540587404372E+01 + 0.1226942456068356E+01 + 0.1226344478409567E+01 + 0.1225746654499850E+01 + 0.1225148984411054E+01 + 0.1224551468215025E+01 + 0.1223954105983612E+01 + 0.1223356897788662E+01 + 0.1222759843702022E+01 + 0.1222162943795540E+01 + 0.1221566198141064E+01 + 0.1220969606810439E+01 + 0.1220373169875515E+01 + 0.1219776887408138E+01 + 0.1219180759480157E+01 + 0.1218584786163417E+01 + 0.1217988967529768E+01 + 0.1217393303651056E+01 + 0.1216797794599128E+01 + 0.1216202440445833E+01 + 0.1215607241263018E+01 + 0.1215012197122529E+01 + 0.1214417308096216E+01 + 0.1213822574255924E+01 + 0.1213227995673502E+01 + 0.1212633572420796E+01 + 0.1212039304569655E+01 + 0.1211445192191926E+01 + 0.1210851235359456E+01 + 0.1210257434144093E+01 + 0.1209663788617684E+01 + 0.1209070298852077E+01 + 0.1208476964919118E+01 + 0.1207883786890656E+01 + 0.1207290764838538E+01 + 0.1206697898834612E+01 + 0.1206105188950724E+01 + 0.1205512635258723E+01 + 0.1204920237830455E+01 + 0.1204327996737769E+01 + 0.1203735912052511E+01 + 0.1203143983846530E+01 + 0.1202552212191672E+01 + 0.1201960597159784E+01 + 0.1201369138822716E+01 + 0.1200777837252313E+01 + 0.1200186692520424E+01 + 0.1199595704698895E+01 + 0.1199004873859575E+01 + 0.1198414200074311E+01 + 0.1197823683414949E+01 + 0.1197233323953338E+01 + 0.1196643121761326E+01 + 0.1196053076910759E+01 + 0.1195463189473484E+01 + 0.1194873459521350E+01 + 0.1194283887126204E+01 + 0.1193694472359893E+01 + 0.1193105215294265E+01 + 0.1192516116001168E+01 + 0.1191927174552447E+01 + 0.1191338391019952E+01 + 0.1190749765475530E+01 + 0.1190161297991027E+01 + 0.1189572988638292E+01 + 0.1188984837489172E+01 + 0.1188396844615514E+01 + 0.1187809010089166E+01 + 0.1187221333981975E+01 + 0.1186633816365789E+01 + 0.1186046457312455E+01 + 0.1185459256893821E+01 + 0.1184872215181733E+01 + 0.1184285332248040E+01 + 0.1183698608164589E+01 + 0.1183112043003228E+01 + 0.1182525636835803E+01 + 0.1181939389734163E+01 + 0.1181353301770154E+01 + 0.1180767373015625E+01 + 0.1180181603542422E+01 + 0.1179595993422393E+01 + 0.1179010542727385E+01 + 0.1178425251529247E+01 + 0.1177840119899825E+01 + 0.1177255147910967E+01 + 0.1176670335634521E+01 + 0.1176085683142333E+01 + 0.1175501190506251E+01 + 0.1174916857798123E+01 + 0.1174332685089796E+01 + 0.1173748672453118E+01 + 0.1173164819959936E+01 + 0.1172581127682097E+01 + 0.1171997595691449E+01 + 0.1171414224059840E+01 + 0.1170831012859116E+01 + 0.1170247962161126E+01 + 0.1169665072037716E+01 + 0.1169082342560735E+01 + 0.1168499773802029E+01 + 0.1167917365833446E+01 + 0.1167335118726834E+01 + 0.1166753032554040E+01 + 0.1166171107386911E+01 + 0.1165589343297295E+01 + 0.1165007740357039E+01 + 0.1164426298637991E+01 + 0.1163845018211999E+01 + 0.1163263899150909E+01 + 0.1162682941526569E+01 + 0.1162102145410827E+01 + 0.1161521510875529E+01 + 0.1160941037992524E+01 + 0.1160360726833659E+01 + 0.1159780577470782E+01 + 0.1159200589975739E+01 + 0.1158620764420379E+01 + 0.1158041100876548E+01 + 0.1157461599416094E+01 + 0.1156882260110865E+01 + 0.1156303083032708E+01 + 0.1155724068253471E+01 + 0.1155145215845000E+01 + 0.1154566525879144E+01 + 0.1153987998427750E+01 + 0.1153409633562665E+01 + 0.1152831431355737E+01 + 0.1152253391878813E+01 + 0.1151675515203741E+01 + 0.1151097801402367E+01 + 0.1150520250546541E+01 + 0.1149942862708108E+01 + 0.1149365637958917E+01 + 0.1148788576370815E+01 + 0.1148211678015649E+01 + 0.1147634942965267E+01 + 0.1147058371291516E+01 + 0.1146481963066244E+01 + 0.1145905718361298E+01 + 0.1145329637248525E+01 + 0.1144753719799774E+01 + 0.1144177966086891E+01 + 0.1143602376181724E+01 + 0.1143026950156120E+01 + 0.1142451688081928E+01 + 0.1141876590030993E+01 + 0.1141301656075165E+01 + 0.1140726886286289E+01 + 0.1140152280736214E+01 + 0.1139577839496788E+01 + 0.1139003562639857E+01 + 0.1138429450237268E+01 + 0.1137855502360871E+01 + 0.1137281719082510E+01 + 0.1136708100474036E+01 + 0.1136134646607294E+01 + 0.1135561357554133E+01 + 0.1134988233386399E+01 + 0.1134415274175940E+01 + 0.1133842479994604E+01 + 0.1133269850914238E+01 + 0.1132697387006690E+01 + 0.1132125088343806E+01 + 0.1131552954997435E+01 + 0.1130980987039423E+01 + 0.1130409184541619E+01 + 0.1129837547575870E+01 + 0.1129266076214023E+01 + 0.1128694770527925E+01 + 0.1128123630589425E+01 + 0.1127552656470369E+01 + 0.1126981848242605E+01 + 0.1126411205977980E+01 + 0.1125840729748343E+01 + 0.1125270419625539E+01 + 0.1124700275681418E+01 + 0.1124130297987825E+01 + 0.1123560486616610E+01 + 0.1122990841639618E+01 + 0.1122421363128698E+01 + 0.1121852051155697E+01 + 0.1121282905792463E+01 + 0.1120713927110842E+01 + 0.1120145115182683E+01 + 0.1119576470079833E+01 + 0.1119007991874139E+01 + 0.1118439680637448E+01 + 0.1117871536441609E+01 + 0.1117303559358468E+01 + 0.1116735749459874E+01 + 0.1116168106817673E+01 + 0.1115600631503713E+01 + 0.1115033323589841E+01 + 0.1114466183147906E+01 + 0.1113899210249753E+01 + 0.1113332404967232E+01 + 0.1112765767372188E+01 + 0.1112199297536471E+01 + 0.1111632995531926E+01 + 0.1111066861430402E+01 + 0.1110500895303746E+01 + 0.1109935097223805E+01 + 0.1109369467262427E+01 + 0.1108804005491460E+01 + 0.1108238711982751E+01 + 0.1107673586808146E+01 + 0.1107108630039495E+01 + 0.1106543841748643E+01 + 0.1105979222007440E+01 + 0.1105414770887731E+01 + 0.1104850488461365E+01 + 0.1104286374800188E+01 + 0.1103722429976049E+01 + 0.1103158654060795E+01 + 0.1102595047126274E+01 + 0.1102031609244332E+01 + 0.1101468340486817E+01 + 0.1100905240925577E+01 + 0.1100342310632459E+01 + 0.1099779549679311E+01 + 0.1099216958137979E+01 + 0.1098654536080312E+01 + 0.1098092283578157E+01 + 0.1097530200703361E+01 + 0.1096968287527772E+01 + 0.1096406544123238E+01 + 0.1095844970561605E+01 + 0.1095283566914721E+01 + 0.1094722333254434E+01 + 0.1094161269652590E+01 + 0.1093600376181039E+01 + 0.1093039652911626E+01 + 0.1092479099916200E+01 + 0.1091918717266607E+01 + 0.1091358505034696E+01 + 0.1090798463292313E+01 + 0.1090238592111307E+01 + 0.1089678891563525E+01 + 0.1089119361720813E+01 + 0.1088560002655020E+01 + 0.1088000814437993E+01 + 0.1087441797141579E+01 + 0.1086882950837627E+01 + 0.1086324275597982E+01 + 0.1085765771494494E+01 + 0.1085207438599008E+01 + 0.1084649276983374E+01 + 0.1084091286719437E+01 + 0.1083533467879046E+01 + 0.1082975820534048E+01 + 0.1082418344756291E+01 + 0.1081861040617621E+01 + 0.1081303908189887E+01 + 0.1080746947544936E+01 + 0.1080190158754615E+01 + 0.1079633541890772E+01 + 0.1079077097025254E+01 + 0.1078520824229908E+01 + 0.1077964723576583E+01 + 0.1077408795137125E+01 + 0.1076853038983382E+01 + 0.1076297455187202E+01 + 0.1075742043820431E+01 + 0.1075186804954918E+01 + 0.1074631738662510E+01 + 0.1074076845015053E+01 + 0.1073522124084397E+01 + 0.1072967575942387E+01 + 0.1072413200660872E+01 + 0.1071858998311700E+01 + 0.1071304968966716E+01 + 0.1070751112697770E+01 + 0.1070197429576708E+01 + 0.1069643919675377E+01 + 0.1069090583065627E+01 + 0.1068537419819302E+01 + 0.1067984430008252E+01 + 0.1067431613714621E+01 + 0.1066878971065895E+01 + 0.1066326502202037E+01 + 0.1065774207216262E+01 + 0.1065222085976034E+01 + 0.1064670138280754E+01 + 0.1064118363983473E+01 + 0.1063566763221663E+01 + 0.1063015336226665E+01 + 0.1062464083195180E+01 + 0.1061913004121861E+01 + 0.1061362098928441E+01 + 0.1060811367552704E+01 + 0.1060260810035845E+01 + 0.1059710426459829E+01 + 0.1059160216896232E+01 + 0.1058610181342651E+01 + 0.1058060319764860E+01 + 0.1057510632135712E+01 + 0.1056961118484112E+01 + 0.1056411778865237E+01 + 0.1055862613332509E+01 + 0.1055313621922944E+01 + 0.1054764804665187E+01 + 0.1054216161588904E+01 + 0.1053667692734166E+01 + 0.1053119398146817E+01 + 0.1052571277870413E+01 + 0.1052023331923552E+01 + 0.1051475560309782E+01 + 0.1050927963029430E+01 + 0.1050380540047043E+01 + 0.1049833291303753E+01 + 0.1049286216752531E+01 + 0.1048739316509094E+01 + 0.1048192590804737E+01 + 0.1047646039856563E+01 + 0.1047099663632362E+01 + 0.1046553461907951E+01 + 0.1046007434468983E+01 + 0.1045461581351630E+01 + 0.1044915902801145E+01 + 0.1044370399059227E+01 + 0.1043825070175216E+01 + 0.1043279916024495E+01 + 0.1042734936480270E+01 + 0.1042190131506367E+01 + 0.1041645501155391E+01 + 0.1041101045484839E+01 + 0.1040556764582330E+01 + 0.1040012658567444E+01 + 0.1039468727557882E+01 + 0.1038924971568587E+01 + 0.1038381390496339E+01 + 0.1037837984233937E+01 + 0.1037294752764316E+01 + 0.1036751696182738E+01 + 0.1036208814589734E+01 + 0.1035666108010436E+01 + 0.1035123576368125E+01 + 0.1034581219581222E+01 + 0.1034039037690166E+01 + 0.1033497030914160E+01 + 0.1032955199484164E+01 + 0.1032413543472212E+01 + 0.1031872062697636E+01 + 0.1031330756958746E+01 + 0.1030789626174560E+01 + 0.1030248670472543E+01 + 0.1029707890000521E+01 + 0.1029167284871893E+01 + 0.1028626855135449E+01 + 0.1028086600832566E+01 + 0.1027546521961886E+01 + 0.1027006618434782E+01 + 0.1026466890152298E+01 + 0.1025927337083257E+01 + 0.1025387959347237E+01 + 0.1024848757084000E+01 + 0.1024309730388667E+01 + 0.1023770879248084E+01 + 0.1023232203633003E+01 + 0.1022693703515732E+01 + 0.1022155378872695E+01 + 0.1021617229681017E+01 + 0.1021079255950391E+01 + 0.1020541457784735E+01 + 0.1020003835304903E+01 + 0.1019466388600372E+01 + 0.1018929117661286E+01 + 0.1018392022458176E+01 + 0.1017855102966647E+01 + 0.1017318359179901E+01 + 0.1016781791094954E+01 + 0.1016245398716603E+01 + 0.1015709182079233E+01 + 0.1015173141224257E+01 + 0.1014637276194921E+01 + 0.1014101587042113E+01 + 0.1013566073818709E+01 + 0.1013030736564457E+01 + 0.1012495575259106E+01 + 0.1011960589865279E+01 + 0.1011425780363277E+01 + 0.1010891146822016E+01 + 0.1010356689338124E+01 + 0.1009822407980785E+01 + 0.1009288302668112E+01 + 0.1008754373266528E+01 + 0.1008220619680626E+01 + 0.1007687042046124E+01 + 0.1007153640585186E+01 + 0.1006620415488212E+01 + 0.1006087366733189E+01 + 0.1005554494211368E+01 + 0.1005021797822967E+01 + 0.1004489277535883E+01 + 0.1003956933348146E+01 + 0.1003424765266976E+01 + 0.1002892773372900E+01 + 0.1002360957782007E+01 + 0.1001829318600538E+01 + 0.1001297855844287E+01 + 0.1000766569481305E+01 + 0.1000235459481935E+01 + 0.9997045258436303E+00 + 0.9991737685793966E+00 + 0.9986431877029240E+00 + 0.9981127832334343E+00 + 0.9975825551935959E+00 + 0.9970525036062448E+00 + 0.9965226284956462E+00 + 0.9959929298870327E+00 + 0.9954634078048809E+00 + 0.9949340622628855E+00 + 0.9944048932668316E+00 + 0.9938759008234353E+00 + 0.9933470849569332E+00 + 0.9928184457054968E+00 + 0.9922899831063152E+00 + 0.9917616971721676E+00 + 0.9912335878947937E+00 + 0.9907056552664415E+00 + 0.9901778993037798E+00 + 0.9896503200462842E+00 + 0.9891229175334537E+00 + 0.9885956917848194E+00 + 0.9880686427997095E+00 + 0.9875417705770941E+00 + 0.9870150751306356E+00 + 0.9864885564900995E+00 + 0.9859622146857717E+00 + 0.9854360497383052E+00 + 0.9849100616569112E+00 + 0.9843842504502774E+00 + 0.9838586161324695E+00 + 0.9833331587244770E+00 + 0.9828078782476759E+00 + 0.9822827747202684E+00 + 0.9817578481560272E+00 + 0.9812330985683794E+00 + 0.9807085259698319E+00 + 0.9801841303714976E+00 + 0.9796599117844634E+00 + 0.9791358702261451E+00 + 0.9786120057243602E+00 + 0.9780883183077997E+00 + 0.9775648079965681E+00 + 0.9770414747954394E+00 + 0.9765183187076522E+00 + 0.9759953397427314E+00 + 0.9754725379224055E+00 + 0.9749499132697858E+00 + 0.9744274658047157E+00 + 0.9739051955401356E+00 + 0.9733831024881122E+00 + 0.9728611866614749E+00 + 0.9723394480748107E+00 + 0.9718178867429540E+00 + 0.9712965026807343E+00 + 0.9707752959029717E+00 + 0.9702542664244840E+00 + 0.9697334142594452E+00 + 0.9692127394202641E+00 + 0.9686922419190516E+00 + 0.9681719217702979E+00 + 0.9676517789956327E+00 + 0.9671318136180176E+00 + 0.9666120256565511E+00 + 0.9660924151176445E+00 + 0.9655729820051098E+00 + 0.9650537263269461E+00 + 0.9645346481062212E+00 + 0.9640157473693888E+00 + 0.9634970241381179E+00 + 0.9629784784152029E+00 + 0.9624601101987873E+00 + 0.9619419194910087E+00 + 0.9614239063112816E+00 + 0.9609060706836893E+00 + 0.9603884126308056E+00 + 0.9598709321680460E+00 + 0.9593536293087061E+00 + 0.9588365040655312E+00 + 0.9583195564484026E+00 + 0.9578027864662719E+00 + 0.9572861941288471E+00 + 0.9567697794501545E+00 + 0.9562535424457524E+00 + 0.9557374831311456E+00 + 0.9552216015214937E+00 + 0.9547058976318212E+00 + 0.9541903714767418E+00 + 0.9536750230680212E+00 + 0.9531598524162224E+00 + 0.9526448595316442E+00 + 0.9521300444226082E+00 + 0.9516154070965254E+00 + 0.9511009475620465E+00 + 0.9505866658383383E+00 + 0.9500725619498422E+00 + 0.9495586359196192E+00 + 0.9490448877574373E+00 + 0.9485313174658069E+00 + 0.9480179250475310E+00 + 0.9475047105092054E+00 + 0.9469916738596762E+00 + 0.9464788151087030E+00 + 0.9459661342762955E+00 + 0.9454536313890664E+00 + 0.9449413064722453E+00 + 0.9444291595316699E+00 + 0.9439171905596242E+00 + 0.9434053995494052E+00 + 0.9428937865131697E+00 + 0.9423823514773673E+00 + 0.9418710944682234E+00 + 0.9413600155023854E+00 + 0.9408491145886316E+00 + 0.9403383917353771E+00 + 0.9398278469485694E+00 + 0.9393174802319614E+00 + 0.9388072915895943E+00 + 0.9382972810334053E+00 + 0.9377874485829439E+00 + 0.9372777942577550E+00 + 0.9367683180695302E+00 + 0.9362590200217566E+00 + 0.9357499001176560E+00 + 0.9352409583639247E+00 + 0.9347321947711921E+00 + 0.9342236093503919E+00 + 0.9337152021156127E+00 + 0.9332069730848126E+00 + 0.9326989222760314E+00 + 0.9321910497009302E+00 + 0.9316833553626911E+00 + 0.9311758392640023E+00 + 0.9306685014121898E+00 + 0.9301613418212661E+00 + 0.9296543605057003E+00 + 0.9291475574760625E+00 + 0.9286409327368203E+00 + 0.9281344862919495E+00 + 0.9276282181485179E+00 + 0.9271221283188458E+00 + 0.9266162168157528E+00 + 0.9261104836509370E+00 + 0.9256049288340257E+00 + 0.9250995523744340E+00 + 0.9245943542830545E+00 + 0.9240893345737481E+00 + 0.9235844932607076E+00 + 0.9230798303535812E+00 + 0.9225753458520771E+00 + 0.9220710397546037E+00 + 0.9215669120636836E+00 + 0.9210629627916470E+00 + 0.9205591919522538E+00 + 0.9200555995586328E+00 + 0.9195521856222719E+00 + 0.9190489501543940E+00 + 0.9185458931650212E+00 + 0.9180430146607607E+00 + 0.9175403146476180E+00 + 0.9170377931319926E+00 + 0.9165354501215113E+00 + 0.9160332856240389E+00 + 0.9155312996470075E+00 + 0.9150294921963747E+00 + 0.9145278632777853E+00 + 0.9140264128981366E+00 + 0.9135251410690037E+00 + 0.9130240478030517E+00 + 0.9125231331122446E+00 + 0.9120223970056728E+00 + 0.9115218394916917E+00 + 0.9110214605769766E+00 + 0.9105212602606622E+00 + 0.9100212385397683E+00 + 0.9095213954150944E+00 + 0.9090217309060439E+00 + 0.9085222450377332E+00 + 0.9080229378308536E+00 + 0.9075238092821756E+00 + 0.9070248593804280E+00 + 0.9065260881177617E+00 + 0.9060274955066756E+00 + 0.9055290815671492E+00 + 0.9050308463168094E+00 + 0.9045327897578467E+00 + 0.9040349118862549E+00 + 0.9035372126999198E+00 + 0.9030396922104579E+00 + 0.9025423504354977E+00 + 0.9020451873911579E+00 + 0.9015482030813619E+00 + 0.9010513975042153E+00 + 0.9005547706587292E+00 + 0.9000583225521913E+00 + 0.8995620531961864E+00 + 0.8990659626015351E+00 + 0.8985700507712490E+00 + 0.8980743177039319E+00 + 0.8975787633990596E+00 + 0.8970833878661203E+00 + 0.8965881911207436E+00 + 0.8960931731780626E+00 + 0.8955983340461204E+00 + 0.8951036737282403E+00 + 0.8946091922272409E+00 + 0.8941148895402245E+00 + 0.8936207656601669E+00 + 0.8931268205810788E+00 + 0.8926330543142775E+00 + 0.8921394668846274E+00 + 0.8916460583163797E+00 + 0.8911528286168162E+00 + 0.8906597777788210E+00 + 0.8901669057951393E+00 + 0.8896742126648217E+00 + 0.8891816983927162E+00 + 0.8886893629839669E+00 + 0.8881972064455461E+00 + 0.8877052287862474E+00 + 0.8872134300148337E+00 + 0.8867218101371563E+00 + 0.8862303691559267E+00 + 0.8857391070736982E+00 + 0.8852480238929839E+00 + 0.8847571196162470E+00 + 0.8842663942460247E+00 + 0.8837758477876728E+00 + 0.8832854802501178E+00 + 0.8827952916424689E+00 + 0.8823052819717796E+00 + 0.8818154512422783E+00 + 0.8813257994579342E+00 + 0.8808363266197810E+00 + 0.8803470327244789E+00 + 0.8798579177684085E+00 + 0.8793689817531533E+00 + 0.8788802246887084E+00 + 0.8783916465858077E+00 + 0.8779032474528085E+00 + 0.8774150272938929E+00 + 0.8769269861127974E+00 + 0.8764391239107047E+00 + 0.8759514406839212E+00 + 0.8754639364282371E+00 + 0.8749766111446636E+00 + 0.8744894648450616E+00 + 0.8740024975426200E+00 + 0.8735157092453013E+00 + 0.8730290999492365E+00 + 0.8725426696489384E+00 + 0.8720564183426321E+00 + 0.8715703460377041E+00 + 0.8710844527429243E+00 + 0.8705987384630042E+00 + 0.8701132031917156E+00 + 0.8696278469210103E+00 + 0.8691426696498571E+00 + 0.8686576713979022E+00 + 0.8681728521885813E+00 + 0.8676882120362063E+00 + 0.8672037509256645E+00 + 0.8667194688359212E+00 + 0.8662353657532115E+00 + 0.8657514416894584E+00 + 0.8652676966622549E+00 + 0.8647841306850943E+00 + 0.8643007437555912E+00 + 0.8638175358675170E+00 + 0.8633345070167687E+00 + 0.8628516572082729E+00 + 0.8623689864493516E+00 + 0.8618864947460684E+00 + 0.8614041820986222E+00 + 0.8609220485055062E+00 + 0.8604400939652415E+00 + 0.8599583184764878E+00 + 0.8594767220379501E+00 + 0.8589953046492646E+00 + 0.8585140663152959E+00 + 0.8580330070427300E+00 + 0.8575521268371428E+00 + 0.8570714256972490E+00 + 0.8565909036191513E+00 + 0.8561105606001538E+00 + 0.8556303966457609E+00 + 0.8551504117648859E+00 + 0.8546706059648418E+00 + 0.8541909792408823E+00 + 0.8537115315827954E+00 + 0.8532322629818893E+00 + 0.8527531734422780E+00 + 0.8522742629743961E+00 + 0.8517955315873611E+00 + 0.8513169792778141E+00 + 0.8508386060356962E+00 + 0.8503604118519650E+00 + 0.8498823967285786E+00 + 0.8494045606739144E+00 + 0.8489269036958907E+00 + 0.8484494257962979E+00 + 0.8479721269730419E+00 + 0.8474950072240699E+00 + 0.8470180665486316E+00 + 0.8465413049468742E+00 + 0.8460647224190126E+00 + 0.8455883189659897E+00 + 0.8451120945892912E+00 + 0.8446360492901652E+00 + 0.8441601830658161E+00 + 0.8436844959101782E+00 + 0.8432089878173073E+00 + 0.8427336587852100E+00 + 0.8422585088153536E+00 + 0.8417835379092821E+00 + 0.8413087460676710E+00 + 0.8408341332903731E+00 + 0.8403596995771942E+00 + 0.8398854449276181E+00 + 0.8394113693407963E+00 + 0.8389374728159375E+00 + 0.8384637553542879E+00 + 0.8379902169593628E+00 + 0.8375168576345711E+00 + 0.8370436773758266E+00 + 0.8365706761699936E+00 + 0.8360978540036228E+00 + 0.8356252108721961E+00 + 0.8351527467828827E+00 + 0.8346804617436053E+00 + 0.8342083557604926E+00 + 0.8337364288371301E+00 + 0.8332646809767519E+00 + 0.8327931121733220E+00 + 0.8323217224065303E+00 + 0.8318505116550384E+00 + 0.8313794799114232E+00 + 0.8309086271915223E+00 + 0.8304379535132970E+00 + 0.8299674588862237E+00 + 0.8294971433043681E+00 + 0.8290270067601618E+00 + 0.8285570492454811E+00 + 0.8280872707511088E+00 + 0.8276176712677170E+00 + 0.8271482507892344E+00 + 0.8266790093165923E+00 + 0.8262099468516311E+00 + 0.8257410633962305E+00 + 0.8252723589523633E+00 + 0.8248038335220089E+00 + 0.8243354871041760E+00 + 0.8238673196902779E+00 + 0.8233993312705314E+00 + 0.8229315218360473E+00 + 0.8224638913804350E+00 + 0.8219964398977391E+00 + 0.8215291673858888E+00 + 0.8210620738546860E+00 + 0.8205951593161910E+00 + 0.8201284237759630E+00 + 0.8196618672178111E+00 + 0.8191954896210017E+00 + 0.8187292909696954E+00 + 0.8182632712659924E+00 + 0.8177974305161044E+00 + 0.8173317687245298E+00 + 0.8168662858888872E+00 + 0.8164009820050660E+00 + 0.8159358570678664E+00 + 0.8154709110672867E+00 + 0.8150061439920025E+00 + 0.8145415558331068E+00 + 0.8140771465933726E+00 + 0.8136129162790972E+00 + 0.8131488648940756E+00 + 0.8126849924288276E+00 + 0.8122212988694887E+00 + 0.8117577842044220E+00 + 0.8112944484349898E+00 + 0.8108312915672503E+00 + 0.8103683136056125E+00 + 0.8099055145438815E+00 + 0.8094428943716785E+00 + 0.8089804530788641E+00 + 0.8085181906570604E+00 + 0.8080561070986489E+00 + 0.8075942023964435E+00 + 0.8071324765466082E+00 + 0.8066709295468783E+00 + 0.8062095613948092E+00 + 0.8057483720863241E+00 + 0.8052873616165144E+00 + 0.8048265299807953E+00 + 0.8043658771777531E+00 + 0.8039054032077340E+00 + 0.8034451080700846E+00 + 0.8029849917533273E+00 + 0.8025250542394540E+00 + 0.8020652955115914E+00 + 0.8016057155674128E+00 + 0.8011463144141205E+00 + 0.8006870920582998E+00 + 0.8002280484961316E+00 + 0.7997691837164027E+00 + 0.7993104977079717E+00 + 0.7988519904631314E+00 + 0.7983936619768208E+00 + 0.7979355122438391E+00 + 0.7974775412554571E+00 + 0.7970197489999982E+00 + 0.7965621354662337E+00 + 0.7961047006533511E+00 + 0.7956474445699624E+00 + 0.7951903672243007E+00 + 0.7947334686086329E+00 + 0.7942767486995740E+00 + 0.7938202074735349E+00 + 0.7933638449185604E+00 + 0.7929076610350512E+00 + 0.7924516558239681E+00 + 0.7919958292851588E+00 + 0.7915401814171897E+00 + 0.7910847122183765E+00 + 0.7906294216806487E+00 + 0.7901743097879715E+00 + 0.7897193765239956E+00 + 0.7892646218802691E+00 + 0.7888100458590155E+00 + 0.7883556484630677E+00 + 0.7879014296876028E+00 + 0.7874473895165739E+00 + 0.7869935279331362E+00 + 0.7865398449266529E+00 + 0.7860863404963650E+00 + 0.7856330146423725E+00 + 0.7851798673629822E+00 + 0.7847268986534024E+00 + 0.7842741085084805E+00 + 0.7838214969173345E+00 + 0.7833690638583177E+00 + 0.7829168093086651E+00 + 0.7824647332556261E+00 + 0.7820128357069166E+00 + 0.7815611166727134E+00 + 0.7811095761551953E+00 + 0.7806582141387368E+00 + 0.7802070306053218E+00 + 0.7797560255409604E+00 + 0.7793051989414344E+00 + 0.7788545508039737E+00 + 0.7784040811230533E+00 + 0.7779537898858473E+00 + 0.7775036770783360E+00 + 0.7770537426883579E+00 + 0.7766039867091321E+00 + 0.7761544091348462E+00 + 0.7757050099596830E+00 + 0.7752557891778077E+00 + 0.7748067467833828E+00 + 0.7743578827690182E+00 + 0.7739091971219359E+00 + 0.7734606898281900E+00 + 0.7730123608757449E+00 + 0.7725642102598317E+00 + 0.7721162379774094E+00 + 0.7716684440232059E+00 + 0.7712208283826485E+00 + 0.7707733910387403E+00 + 0.7703261319778804E+00 + 0.7698790512019982E+00 + 0.7694321487174605E+00 + 0.7689854245258378E+00 + 0.7685388786046375E+00 + 0.7680925109238372E+00 + 0.7676463214576986E+00 + 0.7672003102040918E+00 + 0.7667544771689721E+00 + 0.7663088223560121E+00 + 0.7658633457550299E+00 + 0.7654180473506573E+00 + 0.7649729271281198E+00 + 0.7645279850766562E+00 + 0.7640832211871453E+00 + 0.7636386354501519E+00 + 0.7631942278539031E+00 + 0.7627499983855833E+00 + 0.7623059470330269E+00 + 0.7618620737893749E+00 + 0.7614183786503448E+00 + 0.7609748616110644E+00 + 0.7605315226612117E+00 + 0.7600883617875863E+00 + 0.7596453789773038E+00 + 0.7592025742208913E+00 + 0.7587599475108337E+00 + 0.7583174988389088E+00 + 0.7578752281887829E+00 + 0.7574331355390620E+00 + 0.7569912208695778E+00 + 0.7565494841763336E+00 + 0.7561079254662796E+00 + 0.7556665447451617E+00 + 0.7552253419990485E+00 + 0.7547843171995624E+00 + 0.7543434703189593E+00 + 0.7539028013447096E+00 + 0.7534623102763930E+00 + 0.7530219971135235E+00 + 0.7525818618484364E+00 + 0.7521419044672757E+00 + 0.7517021249561207E+00 + 0.7512625233038825E+00 + 0.7508230995021178E+00 + 0.7503838535423048E+00 + 0.7499447854116860E+00 + 0.7495058950932148E+00 + 0.7490671825697933E+00 + 0.7486286478281187E+00 + 0.7481902908590508E+00 + 0.7477521116536243E+00 + 0.7473141102016556E+00 + 0.7468762864915131E+00 + 0.7464386405115121E+00 + 0.7460011722511529E+00 + 0.7455638817014632E+00 + 0.7451267688534971E+00 + 0.7446898336949039E+00 + 0.7442530762085773E+00 + 0.7438164963771246E+00 + 0.7433800941868951E+00 + 0.7429438696299087E+00 + 0.7425078226986095E+00 + 0.7420719533820039E+00 + 0.7416362616634446E+00 + 0.7412007475257843E+00 + 0.7407654109542753E+00 + 0.7403302519384591E+00 + 0.7398952704683283E+00 + 0.7394604665346886E+00 + 0.7390258401299271E+00 + 0.7385913912465810E+00 + 0.7381571198720282E+00 + 0.7377230259827346E+00 + 0.7372891095538056E+00 + 0.7368553705670285E+00 + 0.7364218090195899E+00 + 0.7359884249108277E+00 + 0.7355552182362580E+00 + 0.7351221889817885E+00 + 0.7346893371318393E+00 + 0.7342566626690084E+00 + 0.7338241655708925E+00 + 0.7333918458142410E+00 + 0.7329597033810788E+00 + 0.7325277382692694E+00 + 0.7320959504796354E+00 + 0.7316643400081665E+00 + 0.7312329068349719E+00 + 0.7308016509369034E+00 + 0.7303705722921335E+00 + 0.7299396708835908E+00 + 0.7295089466952738E+00 + 0.7290783997140423E+00 + 0.7286480299380477E+00 + 0.7282178373682267E+00 + 0.7277878220006241E+00 + 0.7273579838101110E+00 + 0.7269283227658324E+00 + 0.7264988388402905E+00 + 0.7260695320219202E+00 + 0.7256404023038778E+00 + 0.7252114496793721E+00 + 0.7247826741418793E+00 + 0.7243540756849628E+00 + 0.7239256542992568E+00 + 0.7234974099586415E+00 + 0.7230693426310508E+00 + 0.7226414522882621E+00 + 0.7222137389262681E+00 + 0.7217862025504530E+00 + 0.7213588431627191E+00 + 0.7209316607407139E+00 + 0.7205046552518204E+00 + 0.7200778266657273E+00 + 0.7196511749700202E+00 + 0.7192247001605395E+00 + 0.7187984022323370E+00 + 0.7183722811734255E+00 + 0.7179463369682837E+00 + 0.7175205696010819E+00 + 0.7170949790533627E+00 + 0.7166695653052329E+00 + 0.7162443283371982E+00 + 0.7158192681340756E+00 + 0.7153943846832410E+00 + 0.7149696779719377E+00 + 0.7145451479854818E+00 + 0.7141207947079473E+00 + 0.7136966181236501E+00 + 0.7132726182203159E+00 + 0.7128487949880565E+00 + 0.7124251484162519E+00 + 0.7120016784828650E+00 + 0.7115783851571987E+00 + 0.7111552684094521E+00 + 0.7107323282282183E+00 + 0.7103095646172111E+00 + 0.7098869775797057E+00 + 0.7094645671022644E+00 + 0.7090423331565606E+00 + 0.7086202757139905E+00 + 0.7081983947511899E+00 + 0.7077766902498521E+00 + 0.7073551621920935E+00 + 0.7069338105654550E+00 + 0.7065126353631493E+00 + 0.7060916365784409E+00 + 0.7056708141983286E+00 + 0.7052501682027154E+00 + 0.7048296985711366E+00 + 0.7044094052836186E+00 + 0.7039892883207905E+00 + 0.7035693476634124E+00 + 0.7031495832960757E+00 + 0.7027299952084700E+00 + 0.7023105833905042E+00 + 0.7018913478254497E+00 + 0.7014722884869986E+00 + 0.7010534053481924E+00 + 0.7006346983879213E+00 + 0.7002161675942331E+00 + 0.6997978129559592E+00 + 0.6993796344607511E+00 + 0.6989616320942550E+00 + 0.6985438058419144E+00 + 0.6981261556884145E+00 + 0.6977086816170393E+00 + 0.6972913836109020E+00 + 0.6968742616503879E+00 + 0.6964573157104001E+00 + 0.6960405457652091E+00 + 0.6956239517937677E+00 + 0.6952075337852747E+00 + 0.6947912917302733E+00 + 0.6943752256157644E+00 + 0.6939593354202973E+00 + 0.6935436211211959E+00 + 0.6931280826995340E+00 + 0.6927127201461525E+00 + 0.6922975334534556E+00 + 0.6918825226079650E+00 + 0.6914676875794628E+00 + 0.6910530283347763E+00 + 0.6906385448455204E+00 + 0.6902242370982138E+00 + 0.6898101050822661E+00 + 0.6893961487870702E+00 + 0.6889823682019563E+00 + 0.6885687633162425E+00 + 0.6881553341152848E+00 + 0.6877420805696400E+00 + 0.6873290026464099E+00 + 0.6869161003166506E+00 + 0.6865033735676120E+00 + 0.6860908223906897E+00 + 0.6856784467757535E+00 + 0.6852662467058255E+00 + 0.6848542221620054E+00 + 0.6844423731247662E+00 + 0.6840306995714915E+00 + 0.6836192014786159E+00 + 0.6832078788234735E+00 + 0.6827967315882643E+00 + 0.6823857597568249E+00 + 0.6819749633126220E+00 + 0.6815643422369112E+00 + 0.6811538965101354E+00 + 0.6807436261133440E+00 + 0.6803335310315610E+00 + 0.6799236112514064E+00 + 0.6795138667576284E+00 + 0.6791042975214624E+00 + 0.6786949035082230E+00 + 0.6782856846860223E+00 + 0.6778766410454173E+00 + 0.6774677725876803E+00 + 0.6770590793116069E+00 + 0.6766505611936161E+00 + 0.6762422181985018E+00 + 0.6758340502924462E+00 + 0.6754260574561553E+00 + 0.6750182396785403E+00 + 0.6746105969476669E+00 + 0.6742031292414029E+00 + 0.6737958365313582E+00 + 0.6733887187901779E+00 + 0.6729817760041822E+00 + 0.6725750081687996E+00 + 0.6721684152781776E+00 + 0.6717619973067595E+00 + 0.6713557542147504E+00 + 0.6709496859631717E+00 + 0.6705437925304442E+00 + 0.6701380739086207E+00 + 0.6697325300898749E+00 + 0.6693271610621440E+00 + 0.6689219668097687E+00 + 0.6685169473164402E+00 + 0.6681121025552138E+00 + 0.6677074324893605E+00 + 0.6673029370823919E+00 + 0.6668986163116463E+00 + 0.6664944701682409E+00 + 0.6660904986437553E+00 + 0.6656867017262274E+00 + 0.6652830793998717E+00 + 0.6648796316484347E+00 + 0.6644763584470187E+00 + 0.6640732597606160E+00 + 0.6636703355538903E+00 + 0.6632675858005303E+00 + 0.6628650104856688E+00 + 0.6624626095951611E+00 + 0.6620603831142477E+00 + 0.6616583310273231E+00 + 0.6612564533186133E+00 + 0.6608547499665257E+00 + 0.6604532209407945E+00 + 0.6600518662105507E+00 + 0.6596506857519943E+00 + 0.6592496795527634E+00 + 0.6588488476014598E+00 + 0.6584481898798316E+00 + 0.6580477063575802E+00 + 0.6576473970032344E+00 + 0.6572472617910798E+00 + 0.6568473007064021E+00 + 0.6564475137357092E+00 + 0.6560479008628565E+00 + 0.6556484620661824E+00 + 0.6552491973233320E+00 + 0.6548501066108054E+00 + 0.6544511899025082E+00 + 0.6540524471719912E+00 + 0.6536538783937740E+00 + 0.6532554835447711E+00 + 0.6528572626022640E+00 + 0.6524592155461227E+00 + 0.6520613423631970E+00 + 0.6516636430414980E+00 + 0.6512661175634428E+00 + 0.6508687658949469E+00 + 0.6504715879988999E+00 + 0.6500745838433390E+00 + 0.6496777534129150E+00 + 0.6492810966956260E+00 + 0.6488846136774663E+00 + 0.6484883043373512E+00 + 0.6480921686526308E+00 + 0.6476962065999556E+00 + 0.6473004181532578E+00 + 0.6469048032858123E+00 + 0.6465093619717401E+00 + 0.6461140941887570E+00 + 0.6457189999155340E+00 + 0.6453240791313185E+00 + 0.6449293318180446E+00 + 0.6445347579584270E+00 + 0.6441403575323960E+00 + 0.6437461305056358E+00 + 0.6433520768392897E+00 + 0.6429581964990642E+00 + 0.6425644894762956E+00 + 0.6421709557712606E+00 + 0.6417775953791245E+00 + 0.6413844082634551E+00 + 0.6409913943757766E+00 + 0.6405985536721257E+00 + 0.6402058861393625E+00 + 0.6398133917771696E+00 + 0.6394210705822196E+00 + 0.6390289225283194E+00 + 0.6386369475789041E+00 + 0.6382451456981723E+00 + 0.6378535168570734E+00 + 0.6374620610298921E+00 + 0.6370707781918736E+00 + 0.6366796683268595E+00 + 0.6362887314233094E+00 + 0.6358979674682988E+00 + 0.6355073764343424E+00 + 0.6351169582854483E+00 + 0.6347267129865132E+00 + 0.6343366405137169E+00 + 0.6339467408503984E+00 + 0.6335570139795465E+00 + 0.6331674598782593E+00 + 0.6327780785195790E+00 + 0.6323888698765012E+00 + 0.6319998339224870E+00 + 0.6316109706313437E+00 + 0.6312222799771195E+00 + 0.6308337619375970E+00 + 0.6304454164935831E+00 + 0.6300572436257599E+00 + 0.6296692433109295E+00 + 0.6292814155224923E+00 + 0.6288937602337745E+00 + 0.6285062774189899E+00 + 0.6281189670531923E+00 + 0.6277318291114774E+00 + 0.6273448635691276E+00 + 0.6269580704016206E+00 + 0.6265714495843868E+00 + 0.6261850010913209E+00 + 0.6257987248946023E+00 + 0.6254126209664918E+00 + 0.6250266892849588E+00 + 0.6246409298348679E+00 + 0.6242553426012060E+00 + 0.6238699275574886E+00 + 0.6234846846622105E+00 + 0.6230996138731229E+00 + 0.6227147151610589E+00 + 0.6223299885154248E+00 + 0.6219454339269191E+00 + 0.6215610513790443E+00 + 0.6211768408442120E+00 + 0.6207928022938943E+00 + 0.6204089356999011E+00 + 0.6200252410346126E+00 + 0.6196417182704406E+00 + 0.6192583673777897E+00 + 0.6188751883234112E+00 + 0.6184921810737261E+00 + 0.6181093456024017E+00 + 0.6177266818974293E+00 + 0.6173441899484450E+00 + 0.6169618697385388E+00 + 0.6165797212367140E+00 + 0.6161977444101476E+00 + 0.6158159392265646E+00 + 0.6154343056549754E+00 + 0.6150528436645825E+00 + 0.6146715532282258E+00 + 0.6142904343280496E+00 + 0.6139094869476626E+00 + 0.6135287110667989E+00 + 0.6131481066543665E+00 + 0.6127676736773956E+00 + 0.6123874121048144E+00 + 0.6120073219113531E+00 + 0.6116274030728468E+00 + 0.6112476555657088E+00 + 0.6108680793682838E+00 + 0.6104886744593218E+00 + 0.6101094408138570E+00 + 0.6097303783933024E+00 + 0.6093514871559464E+00 + 0.6089727670660147E+00 + 0.6085942181116125E+00 + 0.6082158402868483E+00 + 0.6078376335803056E+00 + 0.6074595979562062E+00 + 0.6070817333720581E+00 + 0.6067040397887079E+00 + 0.6063265171831509E+00 + 0.6059491655372598E+00 + 0.6055719848307065E+00 + 0.6051949750314757E+00 + 0.6048181361036886E+00 + 0.6044414680142704E+00 + 0.6040649707465144E+00 + 0.6036886442896301E+00 + 0.6033124886288635E+00 + 0.6029365037239829E+00 + 0.6025606895246987E+00 + 0.6021850459849055E+00 + 0.6018095730882404E+00 + 0.6014342708311517E+00 + 0.6010591392069363E+00 + 0.6006841781839296E+00 + 0.6003093877187479E+00 + 0.5999347677698440E+00 + 0.5995603183120801E+00 + 0.5991860393287060E+00 + 0.5988119308015317E+00 + 0.5984379926979559E+00 + 0.5980642249773681E+00 + 0.5976906276005131E+00 + 0.5973172005434805E+00 + 0.5969439437916221E+00 + 0.5965708573296482E+00 + 0.5961979411331125E+00 + 0.5958251951715691E+00 + 0.5954526194142515E+00 + 0.5950802138275300E+00 + 0.5947079783757367E+00 + 0.5943359130237034E+00 + 0.5939640177443996E+00 + 0.5935922925170692E+00 + 0.5932207373207446E+00 + 0.5928493521281047E+00 + 0.5924781369065205E+00 + 0.5921070916235134E+00 + 0.5917362162526985E+00 + 0.5913655107732067E+00 + 0.5909949751640480E+00 + 0.5906246093971019E+00 + 0.5902544134372527E+00 + 0.5898843872491588E+00 + 0.5895145307992089E+00 + 0.5891448440556335E+00 + 0.5887753269870677E+00 + 0.5884059795716558E+00 + 0.5880368017984905E+00 + 0.5876677936567195E+00 + 0.5872989551158940E+00 + 0.5869302861211112E+00 + 0.5865617866164572E+00 + 0.5861934565684278E+00 + 0.5858252959738357E+00 + 0.5854573048313031E+00 + 0.5850894831217262E+00 + 0.5847218307999917E+00 + 0.5843543478190327E+00 + 0.5839870341395765E+00 + 0.5836198897347583E+00 + 0.5832529145788361E+00 + 0.5828861086472815E+00 + 0.5825194719176699E+00 + 0.5821530043677429E+00 + 0.5817867059707077E+00 + 0.5814205766912483E+00 + 0.5810546164931274E+00 + 0.5806888253429890E+00 + 0.5803232032133678E+00 + 0.5799577500775166E+00 + 0.5795924659079921E+00 + 0.5792273506758050E+00 + 0.5788624043517566E+00 + 0.5784976269067292E+00 + 0.5781330183117985E+00 + 0.5777685785380708E+00 + 0.5774043075569550E+00 + 0.5770402053406624E+00 + 0.5766762718615359E+00 + 0.5763125070907281E+00 + 0.5759489109959474E+00 + 0.5755854835442815E+00 + 0.5752222247024496E+00 + 0.5748591344359998E+00 + 0.5744962127102502E+00 + 0.5741334594928790E+00 + 0.5737708747597615E+00 + 0.5734084584885521E+00 + 0.5730462106561217E+00 + 0.5726841312363665E+00 + 0.5723222202024738E+00 + 0.5719604775250718E+00 + 0.5715989031641094E+00 + 0.5712374970767490E+00 + 0.5708762592238505E+00 + 0.5705151895831953E+00 + 0.5701542881374031E+00 + 0.5697935548663096E+00 + 0.5694329897357719E+00 + 0.5690725927072714E+00 + 0.5687123637441907E+00 + 0.5683523028204064E+00 + 0.5679924099133903E+00 + 0.5676326849983359E+00 + 0.5672731280366158E+00 + 0.5669137389844245E+00 + 0.5665545178004539E+00 + 0.5661954644600922E+00 + 0.5658365789455582E+00 + 0.5654778612375219E+00 + 0.5651193113051276E+00 + 0.5647609291123771E+00 + 0.5644027146235459E+00 + 0.5640446678053149E+00 + 0.5636867886255333E+00 + 0.5633290770522442E+00 + 0.5629715330551611E+00 + 0.5626141566048815E+00 + 0.5622569476724091E+00 + 0.5618999062327209E+00 + 0.5615430322630775E+00 + 0.5611863257392281E+00 + 0.5608297866198191E+00 + 0.5604734148528220E+00 + 0.5601172103881625E+00 + 0.5597611732020660E+00 + 0.5594053032885734E+00 + 0.5590496006401367E+00 + 0.5586940652223195E+00 + 0.5583386969809315E+00 + 0.5579834958627332E+00 + 0.5576284618366757E+00 + 0.5572735948893821E+00 + 0.5569188950070537E+00 + 0.5565643621595601E+00 + 0.5562099963026786E+00 + 0.5558557973922250E+00 + 0.5555017653943018E+00 + 0.5551479002846302E+00 + 0.5547942020391349E+00 + 0.5544406706298373E+00 + 0.5540873060248028E+00 + 0.5537341081917631E+00 + 0.5533810770940979E+00 + 0.5530282126904136E+00 + 0.5526755149394082E+00 + 0.5523229838105939E+00 + 0.5519706192863406E+00 + 0.5516184213494976E+00 + 0.5512663899725640E+00 + 0.5509145251146997E+00 + 0.5505628267342693E+00 + 0.5502112947935776E+00 + 0.5498599292604375E+00 + 0.5495087301031152E+00 + 0.5491576972923661E+00 + 0.5488068308027185E+00 + 0.5484561306089412E+00 + 0.5481055966805164E+00 + 0.5477552289782254E+00 + 0.5474050274620748E+00 + 0.5470549920953412E+00 + 0.5467051228471517E+00 + 0.5463554196872318E+00 + 0.5460058825844821E+00 + 0.5456565115061971E+00 + 0.5453073064194872E+00 + 0.5449582672916792E+00 + 0.5446093940905553E+00 + 0.5442606867839562E+00 + 0.5439121453396380E+00 + 0.5435637697251696E+00 + 0.5432155599080923E+00 + 0.5428675158560669E+00 + 0.5425196375370534E+00 + 0.5421719249190580E+00 + 0.5418243779697166E+00 + 0.5414769966556461E+00 + 0.5411297809432919E+00 + 0.5407827308003647E+00 + 0.5404358461983828E+00 + 0.5400891271095749E+00 + 0.5397425735018225E+00 + 0.5393961853287097E+00 + 0.5390499625408848E+00 + 0.5387039050959103E+00 + 0.5383580129762561E+00 + 0.5380122861700002E+00 + 0.5376667246581449E+00 + 0.5373213283937501E+00 + 0.5369760973229761E+00 + 0.5366310313987527E+00 + 0.5362861306033286E+00 + 0.5359413949268877E+00 + 0.5355968243529141E+00 + 0.5352524188330719E+00 + 0.5349081783095860E+00 + 0.5345641027297473E+00 + 0.5342201920672451E+00 + 0.5338764463043441E+00 + 0.5335328654203451E+00 + 0.5331894493775571E+00 + 0.5328461981322526E+00 + 0.5325031116428387E+00 + 0.5321601898811994E+00 + 0.5318174328244493E+00 + 0.5314748404483969E+00 + 0.5311324127197194E+00 + 0.5307901496012284E+00 + 0.5304480510551747E+00 + 0.5301061170396385E+00 + 0.5297643475107735E+00 + 0.5294227424261345E+00 + 0.5290813017552112E+00 + 0.5287400254734904E+00 + 0.5283989135561038E+00 + 0.5280579659744204E+00 + 0.5277171826977539E+00 + 0.5273765636944933E+00 + 0.5270361089236139E+00 + 0.5266958183384979E+00 + 0.5263556918937912E+00 + 0.5260157295596796E+00 + 0.5256759313163713E+00 + 0.5253362971430575E+00 + 0.5249968270035074E+00 + 0.5246575208506994E+00 + 0.5243183786380824E+00 + 0.5239794003292614E+00 + 0.5236405858955491E+00 + 0.5233019353083149E+00 + 0.5229634485366917E+00 + 0.5226251255479713E+00 + 0.5222869663093461E+00 + 0.5219489707871579E+00 + 0.5216111389469923E+00 + 0.5212734707541693E+00 + 0.5209359661688556E+00 + 0.5205986251462394E+00 + 0.5202614476417268E+00 + 0.5199244336212208E+00 + 0.5195875830616059E+00 + 0.5192508959400628E+00 + 0.5189143722272966E+00 + 0.5185780118866759E+00 + 0.5182418148810762E+00 + 0.5179057811700259E+00 + 0.5175699107089416E+00 + 0.5172342034532274E+00 + 0.5168986593681357E+00 + 0.5165632784320290E+00 + 0.5162280606239934E+00 + 0.5158930059138150E+00 + 0.5155581142578552E+00 + 0.5152233856114696E+00 + 0.5148888199326112E+00 + 0.5145544171832999E+00 + 0.5142201773259870E+00 + 0.5138861003291213E+00 + 0.5135521861713528E+00 + 0.5132184348322195E+00 + 0.5128848462804610E+00 + 0.5125514204648551E+00 + 0.5122181573320833E+00 + 0.5118850568376065E+00 + 0.5115521189545418E+00 + 0.5112193436580989E+00 + 0.5108867309186741E+00 + 0.5105542806961218E+00 + 0.5102219929489152E+00 + 0.5098898676400553E+00 + 0.5095579047433550E+00 + 0.5092261042341917E+00 + 0.5088944660806407E+00 + 0.5085629902317470E+00 + 0.5082316766335040E+00 + 0.5079005252401850E+00 + 0.5075695360296399E+00 + 0.5072387089838851E+00 + 0.5069080440788955E+00 + 0.5065775412718320E+00 + 0.5062472005162012E+00 + 0.5059170217681086E+00 + 0.5055870049925240E+00 + 0.5052571501563053E+00 + 0.5049274572257162E+00 + 0.5045979261647942E+00 + 0.5042685569370563E+00 + 0.5039393495060232E+00 + 0.5036103038352209E+00 + 0.5032814198881791E+00 + 0.5029526976289144E+00 + 0.5026241370236351E+00 + 0.5022957380391628E+00 + 0.5019675006405500E+00 + 0.5016394247841205E+00 + 0.5013115104235128E+00 + 0.5009837575157523E+00 + 0.5006561660361918E+00 + 0.5003287359663567E+00 + 0.5000014672840862E+00 + 0.4996743599452796E+00 + 0.4993474138977588E+00 + 0.4990206290913737E+00 + 0.4986940054893254E+00 + 0.4983675430601812E+00 + 0.4980412417719731E+00 + 0.4977151015887673E+00 + 0.4973891224728920E+00 + 0.4970633043870015E+00 + 0.4967376472964111E+00 + 0.4964121511677065E+00 + 0.4960868159667301E+00 + 0.4957616416527126E+00 + 0.4954366281814465E+00 + 0.4951117755097646E+00 + 0.4947870836049489E+00 + 0.4944625524401908E+00 + 0.4941381819878881E+00 + 0.4938139722110860E+00 + 0.4934899230670862E+00 + 0.4931660345132726E+00 + 0.4928423065090487E+00 + 0.4925187390151625E+00 + 0.4921953319924610E+00 + 0.4918720854027948E+00 + 0.4915489992087421E+00 + 0.4912260733732695E+00 + 0.4909033078650734E+00 + 0.4905807026573419E+00 + 0.4902582577226976E+00 + 0.4899359730218068E+00 + 0.4896138485051762E+00 + 0.4892918841234192E+00 + 0.4889700798356870E+00 + 0.4886484356089914E+00 + 0.4883269514105903E+00 + 0.4880056272066613E+00 + 0.4876844629623053E+00 + 0.4873634586424357E+00 + 0.4870426142082281E+00 + 0.4867219296168189E+00 + 0.4864014048253303E+00 + 0.4860810397966882E+00 + 0.4857608345006151E+00 + 0.4854407889069555E+00 + 0.4851209029758744E+00 + 0.4848011766552541E+00 + 0.4844816098925084E+00 + 0.4841622026493781E+00 + 0.4838429549073078E+00 + 0.4835238666489386E+00 + 0.4832049378440250E+00 + 0.4828861684431008E+00 + 0.4825675583952021E+00 + 0.4822491076542731E+00 + 0.4819308161822036E+00 + 0.4816126839416123E+00 + 0.4812947108954107E+00 + 0.4809768970070251E+00 + 0.4806592422399475E+00 + 0.4803417465590865E+00 + 0.4800244099320635E+00 + 0.4797072323267697E+00 + 0.4793902137055236E+00 + 0.4790733540190438E+00 + 0.4787566532166343E+00 + 0.4784401112551518E+00 + 0.4781237281085736E+00 + 0.4778075037532185E+00 + 0.4774914381589276E+00 + 0.4771755312795271E+00 + 0.4768597830664135E+00 + 0.4765441934729209E+00 + 0.4762287624576135E+00 + 0.4759134899799324E+00 + 0.4755983760025046E+00 + 0.4752834204973586E+00 + 0.4749686234382483E+00 + 0.4746539847943796E+00 + 0.4743395045202664E+00 + 0.4740251825674620E+00 + 0.4737110188893666E+00 + 0.4733970134459173E+00 + 0.4730831661984964E+00 + 0.4727694771092494E+00 + 0.4724559461432792E+00 + 0.4721425732664061E+00 + 0.4718293584435066E+00 + 0.4715163016354417E+00 + 0.4712034028020065E+00 + 0.4708906619027264E+00 + 0.4705780788958719E+00 + 0.4702656537393473E+00 + 0.4699533863928098E+00 + 0.4696412768248876E+00 + 0.4693293250070702E+00 + 0.4690175309072487E+00 + 0.4687058944730806E+00 + 0.4683944156451632E+00 + 0.4680830943688412E+00 + 0.4677719306188346E+00 + 0.4674609243810669E+00 + 0.4671500756374659E+00 + 0.4668393843426372E+00 + 0.4665288504398108E+00 + 0.4662184738736801E+00 + 0.4659082546001903E+00 + 0.4655981925803951E+00 + 0.4652882877764409E+00 + 0.4649785401593195E+00 + 0.4646689497043945E+00 + 0.4643595163849479E+00 + 0.4640502401548645E+00 + 0.4637411209575977E+00 + 0.4634321587381044E+00 + 0.4631233534576935E+00 + 0.4628147050872327E+00 + 0.4625062135970073E+00 + 0.4621978789493198E+00 + 0.4618897011014049E+00 + 0.4615816800106879E+00 + 0.4612738156380447E+00 + 0.4609661079467267E+00 + 0.4606585568996238E+00 + 0.4603511624537689E+00 + 0.4600439245618223E+00 + 0.4597368431768373E+00 + 0.4594299182599296E+00 + 0.4591231497787433E+00 + 0.4588165377009084E+00 + 0.4585100819903573E+00 + 0.4582037826077762E+00 + 0.4578976395135595E+00 + 0.4575916526642644E+00 + 0.4572858220128020E+00 + 0.4569801475122684E+00 + 0.4566746291237572E+00 + 0.4563692668165979E+00 + 0.4560640605602272E+00 + 0.4557590103164601E+00 + 0.4554541160386075E+00 + 0.4551493776796288E+00 + 0.4548447951956510E+00 + 0.4545403685466320E+00 + 0.4542360976928535E+00 + 0.4539319825983533E+00 + 0.4536280232320885E+00 + 0.4533242195631694E+00 + 0.4530205715520060E+00 + 0.4527170791466466E+00 + 0.4524137422942917E+00 + 0.4521105609477068E+00 + 0.4518075350682390E+00 + 0.4515046646179934E+00 + 0.4512019495609719E+00 + 0.4508993898643499E+00 + 0.4505969854955542E+00 + 0.4502947364170435E+00 + 0.4499926425822407E+00 + 0.4496907039436391E+00 + 0.4493889204573181E+00 + 0.4490872920864545E+00 + 0.4487858187950431E+00 + 0.4484845005442838E+00 + 0.4481833372893557E+00 + 0.4478823289846615E+00 + 0.4475814755860555E+00 + 0.4472807770527990E+00 + 0.4469802333446467E+00 + 0.4466798444238130E+00 + 0.4463796102588125E+00 + 0.4460795308191479E+00 + 0.4457796060689923E+00 + 0.4454798359576058E+00 + 0.4451802204316619E+00 + 0.4448807594414793E+00 + 0.4445814529485304E+00 + 0.4442823009164146E+00 + 0.4439833033083810E+00 + 0.4436844600865106E+00 + 0.4433857712126392E+00 + 0.4430872366468122E+00 + 0.4427888563424986E+00 + 0.4424906302516590E+00 + 0.4421925583295179E+00 + 0.4418946405444413E+00 + 0.4415968768681003E+00 + 0.4412992672682665E+00 + 0.4410018116954991E+00 + 0.4407045100956108E+00 + 0.4404073624170232E+00 + 0.4401103686207927E+00 + 0.4398135286717926E+00 + 0.4395168425339946E+00 + 0.4392203101665800E+00 + 0.4389239315271440E+00 + 0.4386277065744051E+00 + 0.4383316352736384E+00 + 0.4380357175924924E+00 + 0.4377399534953106E+00 + 0.4374443429252068E+00 + 0.4371488858169046E+00 + 0.4368535821102348E+00 + 0.4365584317812829E+00 + 0.4362634348217628E+00 + 0.4359685912181658E+00 + 0.4356739009157385E+00 + 0.4353793638403537E+00 + 0.4350849799217556E+00 + 0.4347907491240845E+00 + 0.4344966714290692E+00 + 0.4342027468167559E+00 + 0.4339089752497295E+00 + 0.4336153566808631E+00 + 0.4333218910626854E+00 + 0.4330285783451665E+00 + 0.4327354184767316E+00 + 0.4324424114069847E+00 + 0.4321495570998092E+00 + 0.4318568555284543E+00 + 0.4315643066650415E+00 + 0.4312719104644838E+00 + 0.4309796668694474E+00 + 0.4306875758235680E+00 + 0.4303956372889735E+00 + 0.4301038512420613E+00 + 0.4298122176583191E+00 + 0.4295207364914844E+00 + 0.4292294076771047E+00 + 0.4289382311513736E+00 + 0.4286472068738638E+00 + 0.4283563348253318E+00 + 0.4280656149865060E+00 + 0.4277750473204189E+00 + 0.4274846317727344E+00 + 0.4271943682886304E+00 + 0.4269042568196032E+00 + 0.4266142973238672E+00 + 0.4263244897600176E+00 + 0.4260348340883013E+00 + 0.4257453302708676E+00 + 0.4254559782698894E+00 + 0.4251667780446042E+00 + 0.4248777295505866E+00 + 0.4245888327432020E+00 + 0.4243000875787781E+00 + 0.4240114940149425E+00 + 0.4237230520093958E+00 + 0.4234347615188431E+00 + 0.4231466224985260E+00 + 0.4228586349036145E+00 + 0.4225707986921874E+00 + 0.4222831138269610E+00 + 0.4219955802710319E+00 + 0.4217081979847977E+00 + 0.4214209669239824E+00 + 0.4211338870438512E+00 + 0.4208469583002899E+00 + 0.4205601806503506E+00 + 0.4202735540512147E+00 + 0.4199870784601193E+00 + 0.4197007538344162E+00 + 0.4194145801314679E+00 + 0.4191285573078840E+00 + 0.4188426853185959E+00 + 0.4185569641183164E+00 + 0.4182713936645145E+00 + 0.4179859739213569E+00 + 0.4177007048540011E+00 + 0.4174155864232944E+00 + 0.4171306185786520E+00 + 0.4168458012676169E+00 + 0.4165611344415597E+00 + 0.4162766180629514E+00 + 0.4159922520962633E+00 + 0.4157080365045104E+00 + 0.4154239712460831E+00 + 0.4151400562784570E+00 + 0.4148562915570992E+00 + 0.4145726770305008E+00 + 0.4142892126456369E+00 + 0.4140058983542835E+00 + 0.4137227341265039E+00 + 0.4134397199367156E+00 + 0.4131568557538144E+00 + 0.4128741415236331E+00 + 0.4125915771859834E+00 + 0.4123091626842710E+00 + 0.4120268979783615E+00 + 0.4117447830328318E+00 + 0.4114628178122856E+00 + 0.4111810022814648E+00 + 0.4108993364051544E+00 + 0.4106178201450953E+00 + 0.4103364534462385E+00 + 0.4100552362477763E+00 + 0.4097741684929138E+00 + 0.4094932501492109E+00 + 0.4092124811933588E+00 + 0.4089318615983883E+00 + 0.4086513913128091E+00 + 0.4083710702750943E+00 + 0.4080908984262027E+00 + 0.4078108757255994E+00 + 0.4075310021410079E+00 + 0.4072512776390952E+00 + 0.4069717021776282E+00 + 0.4066922757100492E+00 + 0.4064129981902116E+00 + 0.4061338695759348E+00 + 0.4058548898271347E+00 + 0.4055760589030476E+00 + 0.4052973767559306E+00 + 0.4050188433340260E+00 + 0.4047404585865137E+00 + 0.4044622224735273E+00 + 0.4041841349620436E+00 + 0.4039061960182036E+00 + 0.4036284055964646E+00 + 0.4033507636433633E+00 + 0.4030732701061014E+00 + 0.4027959249432760E+00 + 0.4025187281218610E+00 + 0.4022416796083740E+00 + 0.4019647793590676E+00 + 0.4016880273220148E+00 + 0.4014114234454452E+00 + 0.4011349676844674E+00 + 0.4008586600001303E+00 + 0.4005825003533716E+00 + 0.4003064886988335E+00 + 0.4000306249852662E+00 + 0.3997549091615158E+00 + 0.3994793411840081E+00 + 0.3992039210168553E+00 + 0.3989286486243803E+00 + 0.3986535239673041E+00 + 0.3983785470023901E+00 + 0.3981037176861191E+00 + 0.3978290359723918E+00 + 0.3975545018120368E+00 + 0.3972801151558132E+00 + 0.3970058759586368E+00 + 0.3967317841807887E+00 + 0.3964578397827962E+00 + 0.3961840427202457E+00 + 0.3959103929418113E+00 + 0.3956368903957744E+00 + 0.3953635350373155E+00 + 0.3950903268320820E+00 + 0.3948172657465064E+00 + 0.3945443517406735E+00 + 0.3942715847642164E+00 + 0.3939989647658286E+00 + 0.3937264916975488E+00 + 0.3934541655173998E+00 + 0.3931819861840237E+00 + 0.3929099536558973E+00 + 0.3926380678911739E+00 + 0.3923663288479565E+00 + 0.3920947364820261E+00 + 0.3918232907442497E+00 + 0.3915519915848791E+00 + 0.3912808389570479E+00 + 0.3910098328205377E+00 + 0.3907389731360569E+00 + 0.3904682598611244E+00 + 0.3901976929452254E+00 + 0.3899272723366078E+00 + 0.3896569979877540E+00 + 0.3893868698627921E+00 + 0.3891168879278326E+00 + 0.3888470521455063E+00 + 0.3885773624679832E+00 + 0.3883078188454758E+00 + 0.3880384212287243E+00 + 0.3877691695702055E+00 + 0.3875000638227533E+00 + 0.3872311039402000E+00 + 0.3869622898799824E+00 + 0.3866936216003487E+00 + 0.3864250990590876E+00 + 0.3861567222121702E+00 + 0.3858884910151188E+00 + 0.3856204054242988E+00 + 0.3853524653997325E+00 + 0.3850846709024319E+00 + 0.3848170218907250E+00 + 0.3845495183101778E+00 + 0.3842821601025696E+00 + 0.3840149472132595E+00 + 0.3837478796062890E+00 + 0.3834809572517703E+00 + 0.3832141801164595E+00 + 0.3829475481478691E+00 + 0.3826810612866700E+00 + 0.3824147194760697E+00 + 0.3821485226753032E+00 + 0.3818824708498303E+00 + 0.3816165639646540E+00 + 0.3813508019815094E+00 + 0.3810851848607463E+00 + 0.3808197125605924E+00 + 0.3805543850230691E+00 + 0.3802892021827128E+00 + 0.3800241639772093E+00 + 0.3797592703712382E+00 + 0.3794945213430556E+00 + 0.3792299168683322E+00 + 0.3789654568975270E+00 + 0.3787011413673058E+00 + 0.3784369702162977E+00 + 0.3781729434050696E+00 + 0.3779090609072283E+00 + 0.3776453226944561E+00 + 0.3773817287140277E+00 + 0.3771182788974657E+00 + 0.3768549731780261E+00 + 0.3765918115149822E+00 + 0.3763287938858278E+00 + 0.3760659202670971E+00 + 0.3758031906157491E+00 + 0.3755406048738761E+00 + 0.3752781629835712E+00 + 0.3750158648930932E+00 + 0.3747537105557781E+00 + 0.3744916999253975E+00 + 0.3742298329611074E+00 + 0.3739681096268668E+00 + 0.3737065298865494E+00 + 0.3734450936985634E+00 + 0.3731838010160328E+00 + 0.3729226517917007E+00 + 0.3726616459741543E+00 + 0.3724007835076335E+00 + 0.3721400643365584E+00 + 0.3718794884166352E+00 + 0.3716190557163678E+00 + 0.3713587662046148E+00 + 0.3710986198386177E+00 + 0.3708386165613397E+00 + 0.3705787563150522E+00 + 0.3703190390496258E+00 + 0.3700594647250565E+00 + 0.3698000333020100E+00 + 0.3695407447395111E+00 + 0.3692815989942126E+00 + 0.3690225960225726E+00 + 0.3687637357804282E+00 + 0.3685050182226430E+00 + 0.3682464433039492E+00 + 0.3679880109754106E+00 + 0.3677297211818487E+00 + 0.3674715738675480E+00 + 0.3672135689841118E+00 + 0.3669557064966841E+00 + 0.3666979863718432E+00 + 0.3664404085717647E+00 + 0.3661829730497611E+00 + 0.3659256797580701E+00 + 0.3656685286466171E+00 + 0.3654115196602612E+00 + 0.3651546527432121E+00 + 0.3648979278463750E+00 + 0.3646413449366536E+00 + 0.3643849039832769E+00 + 0.3641286049486503E+00 + 0.3638724477773828E+00 + 0.3636164324112237E+00 + 0.3633605587965775E+00 + 0.3631048268931178E+00 + 0.3628492366628646E+00 + 0.3625937880656153E+00 + 0.3623384810542367E+00 + 0.3620833155802489E+00 + 0.3618282915952062E+00 + 0.3615734090507766E+00 + 0.3613186678986530E+00 + 0.3610640680922745E+00 + 0.3608096095916174E+00 + 0.3605552923581861E+00 + 0.3603011163505816E+00 + 0.3600470815154963E+00 + 0.3597931877965688E+00 + 0.3595394351401801E+00 + 0.3592858235050447E+00 + 0.3590323528533434E+00 + 0.3587790231454870E+00 + 0.3585258343331519E+00 + 0.3582727863653261E+00 + 0.3580198791925349E+00 + 0.3577671127736347E+00 + 0.3575144870702888E+00 + 0.3572620020424169E+00 + 0.3570096576395520E+00 + 0.3567574538074003E+00 + 0.3565053904924549E+00 + 0.3562534676463967E+00 + 0.3560016852229945E+00 + 0.3557500431764810E+00 + 0.3554985414643963E+00 + 0.3552471800457311E+00 + 0.3549959588789032E+00 + 0.3547448779177182E+00 + 0.3544939371137764E+00 + 0.3542431364188630E+00 + 0.3539924757865114E+00 + 0.3537419551711660E+00 + 0.3534915745270311E+00 + 0.3532413338058923E+00 + 0.3529912329581658E+00 + 0.3527412719349669E+00 + 0.3524914506951866E+00 + 0.3522417692024937E+00 + 0.3519922274193324E+00 + 0.3517428252923947E+00 + 0.3514935627578662E+00 + 0.3512444397530731E+00 + 0.3509954562335317E+00 + 0.3507466121679200E+00 + 0.3504979075245858E+00 + 0.3502493422622826E+00 + 0.3500009163322367E+00 + 0.3497526296853454E+00 + 0.3495044822702836E+00 + 0.3492564740338384E+00 + 0.3490086049230763E+00 + 0.3487608748918359E+00 + 0.3485132839001941E+00 + 0.3482658319083152E+00 + 0.3480185188730423E+00 + 0.3477713447479028E+00 + 0.3475243094861522E+00 + 0.3472774130376231E+00 + 0.3470306553484504E+00 + 0.3467840363647973E+00 + 0.3465375560394825E+00 + 0.3462912143331199E+00 + 0.3460450112066540E+00 + 0.3457989466168729E+00 + 0.3455530205152866E+00 + 0.3453072328530910E+00 + 0.3450615835826374E+00 + 0.3448160726578700E+00 + 0.3445707000328361E+00 + 0.3443254656609493E+00 + 0.3440803694946738E+00 + 0.3438354114864172E+00 + 0.3435905915899520E+00 + 0.3433459097612621E+00 + 0.3431013659564810E+00 + 0.3428569601271588E+00 + 0.3426126922167799E+00 + 0.3423685621680877E+00 + 0.3421245699329824E+00 + 0.3418807154808849E+00 + 0.3416369987831247E+00 + 0.3413934198000566E+00 + 0.3411499784691801E+00 + 0.3409066747251794E+00 + 0.3406635085116785E+00 + 0.3404204797925888E+00 + 0.3401775885345998E+00 + 0.3399348346974361E+00 + 0.3396922182235857E+00 + 0.3394497390529292E+00 + 0.3392073971330938E+00 + 0.3389651924326375E+00 + 0.3387231249236126E+00 + 0.3384811945697869E+00 + 0.3382394013104584E+00 + 0.3379977450804296E+00 + 0.3377562258207714E+00 + 0.3375148434928208E+00 + 0.3372735980620023E+00 + 0.3370324894898771E+00 + 0.3367915177243217E+00 + 0.3365506827101846E+00 + 0.3363099843937857E+00 + 0.3360694227271612E+00 + 0.3358289976637336E+00 + 0.3355887091581515E+00 + 0.3353485571702831E+00 + 0.3351085416613847E+00 + 0.3348686625901014E+00 + 0.3346289199028884E+00 + 0.3343893135426464E+00 + 0.3341498434551744E+00 + 0.3339105096011132E+00 + 0.3336713119458429E+00 + 0.3334322504514322E+00 + 0.3331933250613169E+00 + 0.3329545357124235E+00 + 0.3327158823444689E+00 + 0.3324773649144640E+00 + 0.3322389833860208E+00 + 0.3320007377214786E+00 + 0.3317626278744245E+00 + 0.3315246537948003E+00 + 0.3312868154330820E+00 + 0.3310491127438489E+00 + 0.3308115456835435E+00 + 0.3305741142076947E+00 + 0.3303368182641745E+00 + 0.3300996577970671E+00 + 0.3298626327518468E+00 + 0.3296257430870010E+00 + 0.3293889887680220E+00 + 0.3291523697587012E+00 + 0.3289158860047821E+00 + 0.3286795374414516E+00 + 0.3284433240055815E+00 + 0.3282072456547323E+00 + 0.3279713023596041E+00 + 0.3277354940899309E+00 + 0.3274998208004561E+00 + 0.3272642824355934E+00 + 0.3270288789397904E+00 + 0.3267936102609210E+00 + 0.3265584763494192E+00 + 0.3263234771558315E+00 + 0.3260886126315238E+00 + 0.3258538827285251E+00 + 0.3256192873991351E+00 + 0.3253848266002682E+00 + 0.3251505002928929E+00 + 0.3249163084377367E+00 + 0.3246822509875583E+00 + 0.3244483278875356E+00 + 0.3242145390827933E+00 + 0.3239808845244729E+00 + 0.3237473641699158E+00 + 0.3235139779765376E+00 + 0.3232807258957751E+00 + 0.3230476078723934E+00 + 0.3228146238510467E+00 + 0.3225817737844108E+00 + 0.3223490576348645E+00 + 0.3221164753651822E+00 + 0.3218840269307730E+00 + 0.3216517122773861E+00 + 0.3214195313501969E+00 + 0.3211874840982232E+00 + 0.3209555704759497E+00 + 0.3207237904382783E+00 + 0.3204921439401841E+00 + 0.3202606309367528E+00 + 0.3200292513830301E+00 + 0.3197980052303461E+00 + 0.3195668924238060E+00 + 0.3193359129079923E+00 + 0.3191050666342954E+00 + 0.3188743535664995E+00 + 0.3186437736696345E+00 + 0.3184133268998319E+00 + 0.3181830131956061E+00 + 0.3179528324934474E+00 + 0.3177227847383821E+00 + 0.3174928698938322E+00 + 0.3172630879255879E+00 + 0.3170334387928894E+00 + 0.3168039224395938E+00 + 0.3165745388073646E+00 + 0.3163452878439548E+00 + 0.3161161695127262E+00 + 0.3158871837794971E+00 + 0.3156583306032217E+00 + 0.3154296099236296E+00 + 0.3152010216771144E+00 + 0.3149725658062894E+00 + 0.3147442422728189E+00 + 0.3145160510420009E+00 + 0.3142879920748742E+00 + 0.3140600653181929E+00 + 0.3138322707157201E+00 + 0.3136046082137793E+00 + 0.3133770777680986E+00 + 0.3131496793365665E+00 + 0.3129224128748524E+00 + 0.3126952783296851E+00 + 0.3124682756455440E+00 + 0.3122414047696136E+00 + 0.3120146656610323E+00 + 0.3117880582822368E+00 + 0.3115615825935687E+00 + 0.3113352385452208E+00 + 0.3111090260843159E+00 + 0.3108829451580000E+00 + 0.3106569957135461E+00 + 0.3104311776982693E+00 + 0.3102054910611082E+00 + 0.3099799357604835E+00 + 0.3097545117582474E+00 + 0.3095292190147279E+00 + 0.3093040574804247E+00 + 0.3090790271019509E+00 + 0.3088541278262125E+00 + 0.3086293596022522E+00 + 0.3084047223800351E+00 + 0.3081802161096733E+00 + 0.3079558407423995E+00 + 0.3077315962299723E+00 + 0.3075074825249348E+00 + 0.3072834995865828E+00 + 0.3070596473776672E+00 + 0.3068359258594456E+00 + 0.3066123349785916E+00 + 0.3063888746736649E+00 + 0.3061655448843213E+00 + 0.3059423455628422E+00 + 0.3057192766691419E+00 + 0.3054963381623402E+00 + 0.3052735299908375E+00 + 0.3050508520959973E+00 + 0.3048283044203917E+00 + 0.3046058869243560E+00 + 0.3043835995808768E+00 + 0.3041614423616136E+00 + 0.3039394152142187E+00 + 0.3037175180678056E+00 + 0.3034957508521909E+00 + 0.3032741135173369E+00 + 0.3030526060300642E+00 + 0.3028312283570927E+00 + 0.3026099804530951E+00 + 0.3023888622618218E+00 + 0.3021678737269336E+00 + 0.3019470147989215E+00 + 0.3017262854349854E+00 + 0.3015056855924105E+00 + 0.3012852152233896E+00 + 0.3010648742746956E+00 + 0.3008446626929593E+00 + 0.3006245804284595E+00 + 0.3004046274356815E+00 + 0.3001848036693404E+00 + 0.2999651090840203E+00 + 0.2997455436341419E+00 + 0.2995261072740496E+00 + 0.2993067999552687E+00 + 0.2990876216255060E+00 + 0.2988685722322459E+00 + 0.2986496517255258E+00 + 0.2984308600591362E+00 + 0.2982121971871779E+00 + 0.2979936630644455E+00 + 0.2977752576468396E+00 + 0.2975569808903001E+00 + 0.2973388327458664E+00 + 0.2971208131560906E+00 + 0.2969029220627165E+00 + 0.2966851594114070E+00 + 0.2964675251552047E+00 + 0.2962500192479857E+00 + 0.2960326416462875E+00 + 0.2958153923120970E+00 + 0.2955982712080339E+00 + 0.2953812782894301E+00 + 0.2951644134953587E+00 + 0.2949476767627177E+00 + 0.2947310680362136E+00 + 0.2945145872795516E+00 + 0.2942982344592566E+00 + 0.2940820095349615E+00 + 0.2938659124479949E+00 + 0.2936499431366851E+00 + 0.2934341015435454E+00 + 0.2932183876232355E+00 + 0.2930028013326073E+00 + 0.2927873426279311E+00 + 0.2925720114636377E+00 + 0.2923568077937915E+00 + 0.2921417315710476E+00 + 0.2919267827431550E+00 + 0.2917119612567963E+00 + 0.2914972670605359E+00 + 0.2912827001101082E+00 + 0.2910682603629570E+00 + 0.2908539477742773E+00 + 0.2906397622898623E+00 + 0.2904257038530501E+00 + 0.2902117724106743E+00 + 0.2899979679255916E+00 + 0.2897842903652472E+00 + 0.2895707396919307E+00 + 0.2893573158420066E+00 + 0.2891440187437070E+00 + 0.2889308483307910E+00 + 0.2887178045675405E+00 + 0.2885048874287152E+00 + 0.2882920968848931E+00 + 0.2880794328812289E+00 + 0.2878668953533387E+00 + 0.2876544842391173E+00 + 0.2874421994917882E+00 + 0.2872300410708526E+00 + 0.2870180089346821E+00 + 0.2868061030331864E+00 + 0.2865943233124984E+00 + 0.2863826697193535E+00 + 0.2861711422055402E+00 + 0.2859597407253030E+00 + 0.2857484652330643E+00 + 0.2855373156846872E+00 + 0.2853262920367985E+00 + 0.2851153942449833E+00 + 0.2849046222543445E+00 + 0.2846939760039537E+00 + 0.2844834554341153E+00 + 0.2842730604996643E+00 + 0.2840627911645171E+00 + 0.2838526473919158E+00 + 0.2836426291349847E+00 + 0.2834327363399831E+00 + 0.2832229689531797E+00 + 0.2830133269227817E+00 + 0.2828038101984247E+00 + 0.2825944187299032E+00 + 0.2823851524690149E+00 + 0.2821760113691538E+00 + 0.2819669953838421E+00 + 0.2817581044681084E+00 + 0.2815493385782824E+00 + 0.2813406976703632E+00 + 0.2811321816926763E+00 + 0.2809237905863646E+00 + 0.2807155242926156E+00 + 0.2805073827602220E+00 + 0.2802993659456909E+00 + 0.2800914738057847E+00 + 0.2798837062948359E+00 + 0.2796760633645055E+00 + 0.2794685449663896E+00 + 0.2792611510544073E+00 + 0.2790538815852447E+00 + 0.2788467365155762E+00 + 0.2786397157954288E+00 + 0.2784328193662506E+00 + 0.2782260471690535E+00 + 0.2780193991509634E+00 + 0.2778128752676605E+00 + 0.2776064754754461E+00 + 0.2774001997296149E+00 + 0.2771940479839359E+00 + 0.2769880201920269E+00 + 0.2767821163058259E+00 + 0.2765763362745031E+00 + 0.2763706800469696E+00 + 0.2761651475721519E+00 + 0.2759597387990001E+00 + 0.2757544536764803E+00 + 0.2755492921549915E+00 + 0.2753442541877278E+00 + 0.2751393397282102E+00 + 0.2749345487309214E+00 + 0.2747298811523807E+00 + 0.2745253369493482E+00 + 0.2743209160737419E+00 + 0.2741166184662973E+00 + 0.2739124440661919E+00 + 0.2737083928187620E+00 + 0.2735044646848617E+00 + 0.2733006596277463E+00 + 0.2730969776073289E+00 + 0.2728934185743255E+00 + 0.2726899824778824E+00 + 0.2724866692647936E+00 + 0.2722834788747744E+00 + 0.2720804112462155E+00 + 0.2718774663246669E+00 + 0.2716746440792625E+00 + 0.2714719444839846E+00 + 0.2712693675044435E+00 + 0.2710669130760371E+00 + 0.2708645811273496E+00 + 0.2706623715934078E+00 + 0.2704602844347211E+00 + 0.2702583196181014E+00 + 0.2700564771070909E+00 + 0.2698547568510529E+00 + 0.2696531587955069E+00 + 0.2694516828865071E+00 + 0.2692503290726492E+00 + 0.2690490973032841E+00 + 0.2688479875285159E+00 + 0.2686469997023822E+00 + 0.2684461337801998E+00 + 0.2682453897165861E+00 + 0.2680447674621451E+00 + 0.2678442669660531E+00 + 0.2676438881771829E+00 + 0.2674436310425010E+00 + 0.2672434955082336E+00 + 0.2670434815222514E+00 + 0.2668435890438571E+00 + 0.2666438180372019E+00 + 0.2664441684643499E+00 + 0.2662446402712436E+00 + 0.2660452333963741E+00 + 0.2658459477796638E+00 + 0.2656467833735057E+00 + 0.2654477401365685E+00 + 0.2652488180267831E+00 + 0.2650500169947061E+00 + 0.2648513369868571E+00 + 0.2646527779501167E+00 + 0.2644543398355649E+00 + 0.2642560225967798E+00 + 0.2640578261876323E+00 + 0.2638597505650115E+00 + 0.2636617956877554E+00 + 0.2634639615135299E+00 + 0.2632662479842795E+00 + 0.2630686550309311E+00 + 0.2628711825857614E+00 + 0.2626738306041991E+00 + 0.2624765990592681E+00 + 0.2622794879233244E+00 + 0.2620824971503249E+00 + 0.2618856266790710E+00 + 0.2616888764482183E+00 + 0.2614922464022295E+00 + 0.2612957364907482E+00 + 0.2610993466638431E+00 + 0.2609030768768236E+00 + 0.2607069270900706E+00 + 0.2605108972639576E+00 + 0.2603149873535184E+00 + 0.2601191973081897E+00 + 0.2599235270770192E+00 + 0.2597279766053720E+00 + 0.2595325458344342E+00 + 0.2593372347054488E+00 + 0.2591420431693862E+00 + 0.2589469711891834E+00 + 0.2587520187283341E+00 + 0.2585571857429981E+00 + 0.2583624721795554E+00 + 0.2581678779837535E+00 + 0.2579734031036921E+00 + 0.2577790474908711E+00 + 0.2575848110970187E+00 + 0.2573906938715535E+00 + 0.2571966957602705E+00 + 0.2570028167087327E+00 + 0.2568090566691230E+00 + 0.2566154156049031E+00 + 0.2564218934805483E+00 + 0.2562284902517378E+00 + 0.2560352058578607E+00 + 0.2558420402365954E+00 + 0.2556489933329738E+00 + 0.2554560651068445E+00 + 0.2552632555197957E+00 + 0.2550705645259763E+00 + 0.2548779920632161E+00 + 0.2546855380672119E+00 + 0.2544932024834727E+00 + 0.2543009852809679E+00 + 0.2541088864320837E+00 + 0.2539169059005807E+00 + 0.2537250436277127E+00 + 0.2535332995511105E+00 + 0.2533416736121108E+00 + 0.2531501657626166E+00 + 0.2529587759564021E+00 + 0.2527675041454939E+00 + 0.2525763502764666E+00 + 0.2523853142948347E+00 + 0.2521943961493959E+00 + 0.2520035958001659E+00 + 0.2518129132095543E+00 + 0.2516223483370860E+00 + 0.2514319011314857E+00 + 0.2512415715389503E+00 + 0.2510513595064637E+00 + 0.2508612649842401E+00 + 0.2506712879233230E+00 + 0.2504814282742871E+00 + 0.2502916859855961E+00 + 0.2501020610051217E+00 + 0.2499125532817859E+00 + 0.2497231627697025E+00 + 0.2495338894245841E+00 + 0.2493447332013389E+00 + 0.2491556940505103E+00 + 0.2489667719211704E+00 + 0.2487779667620810E+00 + 0.2485892785201658E+00 + 0.2484007071416710E+00 + 0.2482122525746016E+00 + 0.2480239147784923E+00 + 0.2478356937175201E+00 + 0.2476475893536081E+00 + 0.2474596016323183E+00 + 0.2472717304920281E+00 + 0.2470839758727050E+00 + 0.2468963377272390E+00 + 0.2467088160147026E+00 + 0.2465214106932307E+00 + 0.2463341217123493E+00 + 0.2461469490171018E+00 + 0.2459598925533526E+00 + 0.2457729522753907E+00 + 0.2455861281422726E+00 + 0.2453994201119997E+00 + 0.2452128281304686E+00 + 0.2450263521361339E+00 + 0.2448399920685454E+00 + 0.2446537478819249E+00 + 0.2444676195402863E+00 + 0.2442816070070976E+00 + 0.2440957102359229E+00 + 0.2439099291731548E+00 + 0.2437242637651256E+00 + 0.2435387139597104E+00 + 0.2433532797059951E+00 + 0.2431679609532883E+00 + 0.2429827576542133E+00 + 0.2427976697642140E+00 + 0.2426126972386489E+00 + 0.2424278400293928E+00 + 0.2422430980851067E+00 + 0.2420584713543325E+00 + 0.2418739597856112E+00 + 0.2416895633274843E+00 + 0.2415052819286138E+00 + 0.2413211155408795E+00 + 0.2411370641196417E+00 + 0.2409531276203436E+00 + 0.2407693059956037E+00 + 0.2405855991947278E+00 + 0.2404020071668015E+00 + 0.2402185298596980E+00 + 0.2400351672197534E+00 + 0.2398519191933650E+00 + 0.2396687857341070E+00 + 0.2394857668054367E+00 + 0.2393028623713527E+00 + 0.2391200723860689E+00 + 0.2389373967891820E+00 + 0.2387548355192017E+00 + 0.2385723885220002E+00 + 0.2383900557553901E+00 + 0.2382078371782243E+00 + 0.2380257327449096E+00 + 0.2378437424020214E+00 + 0.2376618660953667E+00 + 0.2374801037740792E+00 + 0.2372984553936632E+00 + 0.2371169209103292E+00 + 0.2369355002781681E+00 + 0.2367541934468536E+00 + 0.2365730003655032E+00 + 0.2363919209822332E+00 + 0.2362109552428879E+00 + 0.2360301030930130E+00 + 0.2358493644837220E+00 + 0.2356687393799145E+00 + 0.2354882277485729E+00 + 0.2353078295472598E+00 + 0.2351275447080691E+00 + 0.2349473731588395E+00 + 0.2347673148382930E+00 + 0.2345873697173263E+00 + 0.2344075377727505E+00 + 0.2342278189713553E+00 + 0.2340482132475035E+00 + 0.2338687205290127E+00 + 0.2336893407510613E+00 + 0.2335100738749224E+00 + 0.2333309198676470E+00 + 0.2331518786925598E+00 + 0.2329729502985039E+00 + 0.2327941346308069E+00 + 0.2326154316355078E+00 + 0.2324368412616798E+00 + 0.2322583634592033E+00 + 0.2320799981784582E+00 + 0.2319017453721551E+00 + 0.2317236049936859E+00 + 0.2315455769968225E+00 + 0.2313676613372898E+00 + 0.2311898579714354E+00 + 0.2310121668538237E+00 + 0.2308345879289785E+00 + 0.2306571211379143E+00 + 0.2304797664232410E+00 + 0.2303025237374668E+00 + 0.2301253930368806E+00 + 0.2299483742775260E+00 + 0.2297714674137224E+00 + 0.2295946723990696E+00 + 0.2294179891867895E+00 + 0.2292414177272796E+00 + 0.2290649579696539E+00 + 0.2288886098629532E+00 + 0.2287123733556663E+00 + 0.2285362483960088E+00 + 0.2283602349327252E+00 + 0.2281843329194402E+00 + 0.2280085423124072E+00 + 0.2278328630673363E+00 + 0.2276572951341350E+00 + 0.2274818384593128E+00 + 0.2273064929898252E+00 + 0.2271312586781789E+00 + 0.2269561354804112E+00 + 0.2267811233523009E+00 + 0.2266062222456209E+00 + 0.2264314321093800E+00 + 0.2262567528924328E+00 + 0.2260821845422047E+00 + 0.2259077270050514E+00 + 0.2257333802278779E+00 + 0.2255591441668895E+00 + 0.2253850187858348E+00 + 0.2252110040479924E+00 + 0.2250370999040032E+00 + 0.2248633062934020E+00 + 0.2246896231557400E+00 + 0.2245160504388819E+00 + 0.2243425880986063E+00 + 0.2241692360910090E+00 + 0.2239959943722684E+00 + 0.2238228628986481E+00 + 0.2236498416261339E+00 + 0.2234769305027375E+00 + 0.2233041294675604E+00 + 0.2231314384595884E+00 + 0.2229588574295905E+00 + 0.2227863863426002E+00 + 0.2226140251642298E+00 + 0.2224417738490751E+00 + 0.2222696323372783E+00 + 0.2220976005681221E+00 + 0.2219256784867636E+00 + 0.2217538660467183E+00 + 0.2215821632022008E+00 + 0.2214105699110909E+00 + 0.2212390861369243E+00 + 0.2210677118435668E+00 + 0.2208964469833372E+00 + 0.2207252914891996E+00 + 0.2205542452923908E+00 + 0.2203833083358942E+00 + 0.2202124805840861E+00 + 0.2200417620035596E+00 + 0.2198711525537670E+00 + 0.2197006521800150E+00 + 0.2195302608259667E+00 + 0.2193599784391725E+00 + 0.2191898049755668E+00 + 0.2190197403921666E+00 + 0.2188497846435575E+00 + 0.2186799376786107E+00 + 0.2185101994453770E+00 + 0.2183405698921501E+00 + 0.2181710489678442E+00 + 0.2180016366214739E+00 + 0.2178323328032480E+00 + 0.2176631374667235E+00 + 0.2174940505660396E+00 + 0.2173250720553540E+00 + 0.2171562018888816E+00 + 0.2169874400208474E+00 + 0.2168187864043959E+00 + 0.2166502409890405E+00 + 0.2164818037235349E+00 + 0.2163134745566770E+00 + 0.2161452534374310E+00 + 0.2159771403147991E+00 + 0.2158091351385237E+00 + 0.2156412378613316E+00 + 0.2154734484367016E+00 + 0.2153057668186239E+00 + 0.2151381929633518E+00 + 0.2149707268277629E+00 + 0.2148033683662652E+00 + 0.2146361175212888E+00 + 0.2144689742316397E+00 + 0.2143019384393115E+00 + 0.2141350101032677E+00 + 0.2139681891880931E+00 + 0.2138014756561013E+00 + 0.2136348694563068E+00 + 0.2134683705329053E+00 + 0.2133019788313595E+00 + 0.2131356943053167E+00 + 0.2129695169116650E+00 + 0.2128034466065036E+00 + 0.2126374833402993E+00 + 0.2124716270610854E+00 + 0.2123058777169844E+00 + 0.2121402352568825E+00 + 0.2119746996300271E+00 + 0.2118092707859483E+00 + 0.2116439486766108E+00 + 0.2114787332552247E+00 + 0.2113136244752889E+00 + 0.2111486222929664E+00 + 0.2109837266659047E+00 + 0.2108189375505733E+00 + 0.2106542548907066E+00 + 0.2104896786223324E+00 + 0.2103252086832601E+00 + 0.2101608450337945E+00 + 0.2099965876490173E+00 + 0.2098324365022038E+00 + 0.2096683915390512E+00 + 0.2095044526856047E+00 + 0.2093406198693334E+00 + 0.2091768930455048E+00 + 0.2090132721908637E+00 + 0.2088497572812099E+00 + 0.2086863482667279E+00 + 0.2085230450761521E+00 + 0.2083598476385223E+00 + 0.2081967559016916E+00 + 0.2080337698305827E+00 + 0.2078708893904253E+00 + 0.2077081145394739E+00 + 0.2075454452291265E+00 + 0.2073828814104688E+00 + 0.2072204230339872E+00 + 0.2070580700495301E+00 + 0.2068958224068864E+00 + 0.2067336800549760E+00 + 0.2065716429417163E+00 + 0.2064097110150774E+00 + 0.2062478842268957E+00 + 0.2060861625338427E+00 + 0.2059245458927724E+00 + 0.2057630342553084E+00 + 0.2056016275659840E+00 + 0.2054403257689829E+00 + 0.2052791288165910E+00 + 0.2051180366730055E+00 + 0.2049570493032172E+00 + 0.2047961666618935E+00 + 0.2046353886872285E+00 + 0.2044747153160590E+00 + 0.2043141464947942E+00 + 0.2041536821864349E+00 + 0.2039933223555793E+00 + 0.2038330669608159E+00 + 0.2036729159494106E+00 + 0.2035128692673841E+00 + 0.2033529268618211E+00 + 0.2031930886819886E+00 + 0.2030333546774270E+00 + 0.2028737247989636E+00 + 0.2027141990003001E+00 + 0.2025547772355268E+00 + 0.2023954594586837E+00 + 0.2022362456236874E+00 + 0.2020771356844346E+00 + 0.2019181295938974E+00 + 0.2017592273025905E+00 + 0.2016004287606235E+00 + 0.2014417339167038E+00 + 0.2012831427154652E+00 + 0.2011246551008091E+00 + 0.2009662710225910E+00 + 0.2008079904495941E+00 + 0.2006498133543523E+00 + 0.2004917397010637E+00 + 0.2003337694249043E+00 + 0.2001759024547398E+00 + 0.2000181387261190E+00 + 0.1998604782000971E+00 + 0.1997029208438111E+00 + 0.1995454666207024E+00 + 0.1993881154787489E+00 + 0.1992308673618854E+00 + 0.1990737222157028E+00 + 0.1989166799933877E+00 + 0.1987597406503035E+00 + 0.1986029041416879E+00 + 0.1984461704221456E+00 + 0.1982895394460824E+00 + 0.1981330111670026E+00 + 0.1979765855334268E+00 + 0.1978202624921646E+00 + 0.1976640419910703E+00 + 0.1975079239843571E+00 + 0.1973519084286246E+00 + 0.1971959952795153E+00 + 0.1970401844862426E+00 + 0.1968844759953857E+00 + 0.1967288697542675E+00 + 0.1965733657157527E+00 + 0.1964179638351822E+00 + 0.1962626640676390E+00 + 0.1961074663660121E+00 + 0.1959523706821222E+00 + 0.1957973769681457E+00 + 0.1956424851795240E+00 + 0.1954876952734298E+00 + 0.1953330072059839E+00 + 0.1951784209226357E+00 + 0.1950239363626887E+00 + 0.1948695534665870E+00 + 0.1947152721883132E+00 + 0.1945610924903176E+00 + 0.1944070143346916E+00 + 0.1942530376774440E+00 + 0.1940991624704551E+00 + 0.1939453886654566E+00 + 0.1937917162131973E+00 + 0.1936381450637028E+00 + 0.1934846751668604E+00 + 0.1933313064706447E+00 + 0.1931780389215020E+00 + 0.1930248724663004E+00 + 0.1928718070602237E+00 + 0.1927188426656508E+00 + 0.1925659792447596E+00 + 0.1924132167507612E+00 + 0.1922605551284632E+00 + 0.1921079943226145E+00 + 0.1919555342842460E+00 + 0.1918031749707635E+00 + 0.1916509163396403E+00 + 0.1914987583423541E+00 + 0.1913467009237905E+00 + 0.1911947440287373E+00 + 0.1910428876097538E+00 + 0.1908911316286593E+00 + 0.1907394760476522E+00 + 0.1905879208226878E+00 + 0.1904364659016584E+00 + 0.1902851112319143E+00 + 0.1901338567604453E+00 + 0.1899827024337365E+00 + 0.1898316481983589E+00 + 0.1896806940078818E+00 + 0.1895298398265076E+00 + 0.1893790856191762E+00 + 0.1892284313399816E+00 + 0.1890778769251282E+00 + 0.1889274223092910E+00 + 0.1887770674401684E+00 + 0.1886268122887967E+00 + 0.1884766568285388E+00 + 0.1883266010205166E+00 + 0.1881766448019997E+00 + 0.1880267881075594E+00 + 0.1878770308807830E+00 + 0.1877273730843808E+00 + 0.1875778146834822E+00 + 0.1874283556380197E+00 + 0.1872789958959150E+00 + 0.1871297354033990E+00 + 0.1869805741071991E+00 + 0.1868315119552916E+00 + 0.1866825488958513E+00 + 0.1865336848796932E+00 + 0.1863849198649040E+00 + 0.1862362538108111E+00 + 0.1860876866759851E+00 + 0.1859392184167211E+00 + 0.1857908489888862E+00 + 0.1856425783445540E+00 + 0.1854944064232930E+00 + 0.1853463331620987E+00 + 0.1851983585045714E+00 + 0.1850504824181646E+00 + 0.1849027048757151E+00 + 0.1847550258436149E+00 + 0.1846074452627390E+00 + 0.1844599630676485E+00 + 0.1843125791976661E+00 + 0.1841652936127900E+00 + 0.1840181062786268E+00 + 0.1838710171578231E+00 + 0.1837240261989305E+00 + 0.1835771333463111E+00 + 0.1834303385456920E+00 + 0.1832836417499383E+00 + 0.1831370429142386E+00 + 0.1829905419937241E+00 + 0.1828441389431895E+00 + 0.1826978337173092E+00 + 0.1825516262698600E+00 + 0.1824055165489570E+00 + 0.1822595045005122E+00 + 0.1821135900717195E+00 + 0.1819677732187086E+00 + 0.1818220539014029E+00 + 0.1816764320793925E+00 + 0.1815309077096080E+00 + 0.1813854807477501E+00 + 0.1812401511481614E+00 + 0.1810949188537360E+00 + 0.1809497838016004E+00 + 0.1808047459311192E+00 + 0.1806598052030907E+00 + 0.1805149615900561E+00 + 0.1803702150625643E+00 + 0.1802255655691005E+00 + 0.1800810130450138E+00 + 0.1799365574268650E+00 + 0.1797921986673654E+00 + 0.1796479367296647E+00 + 0.1795037715766413E+00 + 0.1793597031653433E+00 + 0.1792157314487299E+00 + 0.1790718563793851E+00 + 0.1789280779056143E+00 + 0.1787843959724698E+00 + 0.1786408105255684E+00 + 0.1784973215212718E+00 + 0.1783539289247988E+00 + 0.1782106327008032E+00 + 0.1780674327982433E+00 + 0.1779243291520580E+00 + 0.1777813216975686E+00 + 0.1776384103890752E+00 + 0.1774955951992442E+00 + 0.1773528761007735E+00 + 0.1772102530482883E+00 + 0.1770677259774665E+00 + 0.1769252948235406E+00 + 0.1767829595348973E+00 + 0.1766407200748661E+00 + 0.1764985764074087E+00 + 0.1763565284904419E+00 + 0.1762145762744403E+00 + 0.1760727197094767E+00 + 0.1759309587478960E+00 + 0.1757892933450761E+00 + 0.1756477234565429E+00 + 0.1755062490346568E+00 + 0.1753648700271985E+00 + 0.1752235863816232E+00 + 0.1750823980474199E+00 + 0.1749413049772711E+00 + 0.1748003071241721E+00 + 0.1746594044437403E+00 + 0.1745185968960642E+00 + 0.1743778844416231E+00 + 0.1742372670362498E+00 + 0.1740967446271665E+00 + 0.1739563171606761E+00 + 0.1738159845850019E+00 + 0.1736757468522401E+00 + 0.1735356039149674E+00 + 0.1733955557288253E+00 + 0.1732556022561811E+00 + 0.1731157434602717E+00 + 0.1729759792969890E+00 + 0.1728363097046511E+00 + 0.1726967346190197E+00 + 0.1725572539844573E+00 + 0.1724178677677906E+00 + 0.1722785759394616E+00 + 0.1721393784641614E+00 + 0.1720002752901645E+00 + 0.1718612663628364E+00 + 0.1717223516277460E+00 + 0.1715835310311019E+00 + 0.1714448045192366E+00 + 0.1713061720426030E+00 + 0.1711676335657388E+00 + 0.1710291890561899E+00 + 0.1708908384777410E+00 + 0.1707525817800799E+00 + 0.1706144189095931E+00 + 0.1704763498124668E+00 + 0.1703383744340607E+00 + 0.1702004927195233E+00 + 0.1700627046178580E+00 + 0.1699250100954373E+00 + 0.1697874091235214E+00 + 0.1696499016682080E+00 + 0.1695124876700784E+00 + 0.1693751670618463E+00 + 0.1692379397812943E+00 + 0.1691008057937119E+00 + 0.1689637650736729E+00 + 0.1688268175910961E+00 + 0.1686899632881187E+00 + 0.1685532020966263E+00 + 0.1684165339526778E+00 + 0.1682799588198020E+00 + 0.1681434766725958E+00 + 0.1680070874819978E+00 + 0.1678707911922961E+00 + 0.1677345877360667E+00 + 0.1675984770489106E+00 + 0.1674624590909639E+00 + 0.1673265338341093E+00 + 0.1671907012482709E+00 + 0.1670549612854313E+00 + 0.1669193138882234E+00 + 0.1667837590000238E+00 + 0.1666482965722810E+00 + 0.1665129265610170E+00 + 0.1663776489221387E+00 + 0.1662424636097306E+00 + 0.1661073705767550E+00 + 0.1659723697761108E+00 + 0.1658374611601246E+00 + 0.1657026446807399E+00 + 0.1655679202901825E+00 + 0.1654332879446278E+00 + 0.1652987476031138E+00 + 0.1651642992245311E+00 + 0.1650299427645129E+00 + 0.1648956781761327E+00 + 0.1647615054122680E+00 + 0.1646274244235575E+00 + 0.1644934351587364E+00 + 0.1643595375665242E+00 + 0.1642257315965724E+00 + 0.1640920171993897E+00 + 0.1639583943259016E+00 + 0.1638248629358606E+00 + 0.1636914229978400E+00 + 0.1635580744802367E+00 + 0.1634248173365364E+00 + 0.1632916515040825E+00 + 0.1631585769197650E+00 + 0.1630255935314978E+00 + 0.1628927013001255E+00 + 0.1627599001871952E+00 + 0.1626271901529522E+00 + 0.1624945711559876E+00 + 0.1623620431546719E+00 + 0.1622296061023169E+00 + 0.1620972599452623E+00 + 0.1619650046294132E+00 + 0.1618328401046965E+00 + 0.1617007663270516E+00 + 0.1615687832528666E+00 + 0.1614368908355890E+00 + 0.1613050890238925E+00 + 0.1611733777661010E+00 + 0.1610417570180456E+00 + 0.1609102267487917E+00 + 0.1607787869286494E+00 + 0.1606474375160245E+00 + 0.1605161784465090E+00 + 0.1603850096531930E+00 + 0.1602539310814571E+00 + 0.1601229427023163E+00 + 0.1599920444899428E+00 + 0.1598612364070288E+00 + 0.1597305183901803E+00 + 0.1595998903724264E+00 + 0.1594693522965028E+00 + 0.1593389041292034E+00 + 0.1592085458409761E+00 + 0.1590782773968904E+00 + 0.1589480987474598E+00 + 0.1588180098407610E+00 + 0.1586880106268610E+00 + 0.1585581010617131E+00 + 0.1584282811023541E+00 + 0.1582985507030675E+00 + 0.1581689098092254E+00 + 0.1580393583643987E+00 + 0.1579098963165369E+00 + 0.1577805236291173E+00 + 0.1576512402690598E+00 + 0.1575220462006669E+00 + 0.1573929413780658E+00 + 0.1572639257529108E+00 + 0.1571349992760131E+00 + 0.1570061618945886E+00 + 0.1568774135548958E+00 + 0.1567487542053654E+00 + 0.1566201838045844E+00 + 0.1564917023141053E+00 + 0.1563633096938497E+00 + 0.1562350058953739E+00 + 0.1561067908675582E+00 + 0.1559786645608914E+00 + 0.1558506269349237E+00 + 0.1557226779523765E+00 + 0.1555948175737626E+00 + 0.1554670457458999E+00 + 0.1553393624103701E+00 + 0.1552117675113372E+00 + 0.1550842610106335E+00 + 0.1549568428774644E+00 + 0.1548295130789835E+00 + 0.1547022715667390E+00 + 0.1545751182851798E+00 + 0.1544480531792354E+00 + 0.1543210761981241E+00 + 0.1541941872931886E+00 + 0.1540673864170090E+00 + 0.1539406735334142E+00 + 0.1538140486122955E+00 + 0.1536875116213941E+00 + 0.1535610625058561E+00 + 0.1534347011975944E+00 + 0.1533084276307828E+00 + 0.1531822417672827E+00 + 0.1530561435865665E+00 + 0.1529301330663637E+00 + 0.1528042101585602E+00 + 0.1526783747972041E+00 + 0.1525526269170696E+00 + 0.1524269664684306E+00 + 0.1523013934131629E+00 + 0.1521759077133203E+00 + 0.1520505093293104E+00 + 0.1519251982202042E+00 + 0.1517999743445936E+00 + 0.1516748376529362E+00 + 0.1515497880885392E+00 + 0.1514248255950210E+00 + 0.1512999501277245E+00 + 0.1511751616531611E+00 + 0.1510504601379969E+00 + 0.1509258455418541E+00 + 0.1508013178170852E+00 + 0.1506768769155933E+00 + 0.1505525227860024E+00 + 0.1504282553732723E+00 + 0.1503040746224582E+00 + 0.1501799804882928E+00 + 0.1500559729372303E+00 + 0.1499320519362464E+00 + 0.1498082174450441E+00 + 0.1496844694137766E+00 + 0.1495608077919899E+00 + 0.1494372325312331E+00 + 0.1493137435859063E+00 + 0.1491903409106105E+00 + 0.1490670244589065E+00 + 0.1489437941827493E+00 + 0.1488206500339843E+00 + 0.1486975919665936E+00 + 0.1485746199381431E+00 + 0.1484517339065404E+00 + 0.1483289338296913E+00 + 0.1482062196654956E+00 + 0.1480835913718387E+00 + 0.1479610489047265E+00 + 0.1478385922164410E+00 + 0.1477162212588293E+00 + 0.1475939359845169E+00 + 0.1474717363478085E+00 + 0.1473496223032230E+00 + 0.1472275938040166E+00 + 0.1471056508004737E+00 + 0.1469837932424610E+00 + 0.1468620210838654E+00 + 0.1467403342888951E+00 + 0.1466187328233867E+00 + 0.1464972166494133E+00 + 0.1463757857184922E+00 + 0.1462544399803048E+00 + 0.1461331793857252E+00 + 0.1460120038892846E+00 + 0.1458909134462134E+00 + 0.1457699080105489E+00 + 0.1456489875323241E+00 + 0.1455281519607318E+00 + 0.1454074012483306E+00 + 0.1452867353600648E+00 + 0.1451661542637274E+00 + 0.1450456579229386E+00 + 0.1449252462844825E+00 + 0.1448049192908975E+00 + 0.1446846768873933E+00 + 0.1445645190309970E+00 + 0.1444444456820031E+00 + 0.1443244568003429E+00 + 0.1442045523441832E+00 + 0.1440847322711565E+00 + 0.1439649965380166E+00 + 0.1438453450968410E+00 + 0.1437257778981554E+00 + 0.1436062948935481E+00 + 0.1434868960408234E+00 + 0.1433675813000408E+00 + 0.1432483506303124E+00 + 0.1431292039846400E+00 + 0.1430101413136045E+00 + 0.1428911625683954E+00 + 0.1427722677045562E+00 + 0.1426534566795116E+00 + 0.1425347294509825E+00 + 0.1424160859789453E+00 + 0.1422975262244394E+00 + 0.1421790501470012E+00 + 0.1420606576931121E+00 + 0.1419423488025621E+00 + 0.1418241234174934E+00 + 0.1417059815031460E+00 + 0.1415879230376334E+00 + 0.1414699479966559E+00 + 0.1413520563286586E+00 + 0.1412342479655837E+00 + 0.1411165228410511E+00 + 0.1409988809114305E+00 + 0.1408813221480463E+00 + 0.1407638465213752E+00 + 0.1406464539870663E+00 + 0.1405291444901949E+00 + 0.1404119179764642E+00 + 0.1402947744044676E+00 + 0.1401777137427642E+00 + 0.1400607359593790E+00 + 0.1399438410087937E+00 + 0.1398270288341418E+00 + 0.1397102993786057E+00 + 0.1395936525931529E+00 + 0.1394770884358199E+00 + 0.1393606068650533E+00 + 0.1392442078427305E+00 + 0.1391278913341032E+00 + 0.1390116573041647E+00 + 0.1388955057075378E+00 + 0.1387794364877931E+00 + 0.1386634495882240E+00 + 0.1385475449599740E+00 + 0.1384317225632523E+00 + 0.1383159823587091E+00 + 0.1382003243047701E+00 + 0.1380847483570753E+00 + 0.1379692544711208E+00 + 0.1378538426037402E+00 + 0.1377385127135818E+00 + 0.1376232647593645E+00 + 0.1375080986967388E+00 + 0.1373930144768399E+00 + 0.1372780120504817E+00 + 0.1371630913710723E+00 + 0.1370482523961625E+00 + 0.1369334950836783E+00 + 0.1368188193918762E+00 + 0.1367042252795874E+00 + 0.1365897127056673E+00 + 0.1364752816254227E+00 + 0.1363609319874688E+00 + 0.1362466637397246E+00 + 0.1361324768366146E+00 + 0.1360183712459106E+00 + 0.1359043469369789E+00 + 0.1357904038701463E+00 + 0.1356765419855431E+00 + 0.1355627612205967E+00 + 0.1354490615237419E+00 + 0.1353354428702299E+00 + 0.1352219052392960E+00 + 0.1351084485981664E+00 + 0.1349950728821283E+00 + 0.1348817780212268E+00 + 0.1347685639561662E+00 + 0.1346554306586345E+00 + 0.1345423781059161E+00 + 0.1344294062686437E+00 + 0.1343165150962890E+00 + 0.1342037045341264E+00 + 0.1340909745305086E+00 + 0.1339783250445130E+00 + 0.1338657560375516E+00 + 0.1337532674691193E+00 + 0.1336408592913911E+00 + 0.1335285314547945E+00 + 0.1334162839107512E+00 + 0.1333041166148445E+00 + 0.1331920295237464E+00 + 0.1330800225952237E+00 + 0.1329680957920680E+00 + 0.1328562490785127E+00 + 0.1327444824168309E+00 + 0.1326327957594232E+00 + 0.1325211890555886E+00 + 0.1324096622557009E+00 + 0.1322982153160831E+00 + 0.1321868481951032E+00 + 0.1320755608511528E+00 + 0.1319643532427542E+00 + 0.1318532253284794E+00 + 0.1317421770659543E+00 + 0.1316312084064741E+00 + 0.1315203192987382E+00 + 0.1314095096929574E+00 + 0.1312987795505534E+00 + 0.1311881288379611E+00 + 0.1310775575202632E+00 + 0.1309670655513343E+00 + 0.1308566528795901E+00 + 0.1307463194541794E+00 + 0.1306360652312057E+00 + 0.1305258901704576E+00 + 0.1304157942313938E+00 + 0.1303057773698224E+00 + 0.1301958395394481E+00 + 0.1300859806946330E+00 + 0.1299762007973486E+00 + 0.1298664998143305E+00 + 0.1297568777112644E+00 + 0.1296473344398343E+00 + 0.1295378699422124E+00 + 0.1294284841612296E+00 + 0.1293191770514831E+00 + 0.1292099485762395E+00 + 0.1291007986990863E+00 + 0.1289917273855077E+00 + 0.1288827346025016E+00 + 0.1287738203160878E+00 + 0.1286649844739411E+00 + 0.1285562270078600E+00 + 0.1284475478504007E+00 + 0.1283389469604596E+00 + 0.1282304243216333E+00 + 0.1281219799175077E+00 + 0.1280136137088435E+00 + 0.1279053256332142E+00 + 0.1277971156276700E+00 + 0.1276889836433982E+00 + 0.1275809296471445E+00 + 0.1274729536063000E+00 + 0.1273650554833044E+00 + 0.1272572352346920E+00 + 0.1271494928165748E+00 + 0.1270418281820945E+00 + 0.1269342412805545E+00 + 0.1268267320611600E+00 + 0.1267193004803812E+00 + 0.1266119465048683E+00 + 0.1265046701018795E+00 + 0.1263974712299683E+00 + 0.1262903498344540E+00 + 0.1261833058597027E+00 + 0.1260763392611954E+00 + 0.1259694500127574E+00 + 0.1258626380897942E+00 + 0.1257559034551853E+00 + 0.1256492460493499E+00 + 0.1255426658104518E+00 + 0.1254361626868002E+00 + 0.1253297366464850E+00 + 0.1252233876598339E+00 + 0.1251171156892172E+00 + 0.1250109206801185E+00 + 0.1249048025759000E+00 + 0.1247987613289249E+00 + 0.1246927969123737E+00 + 0.1245869093023357E+00 + 0.1244810984648327E+00 + 0.1243753643404810E+00 + 0.1242697068659659E+00 + 0.1241641259871405E+00 + 0.1240586216751276E+00 + 0.1239531939053613E+00 + 0.1238478426468552E+00 + 0.1237425678492717E+00 + 0.1236373694586433E+00 + 0.1235322474238543E+00 + 0.1234272017031963E+00 + 0.1233222322568982E+00 + 0.1232173390441156E+00 + 0.1231125220201265E+00 + 0.1230077811393332E+00 + 0.1229031163576704E+00 + 0.1227985276371460E+00 + 0.1226940149412722E+00 + 0.1225895782321722E+00 + 0.1224852174659375E+00 + 0.1223809325970212E+00 + 0.1222767235806526E+00 + 0.1221725903757555E+00 + 0.1220685329423542E+00 + 0.1219645512388056E+00 + 0.1218606452147503E+00 + 0.1217568148169892E+00 + 0.1216530599952534E+00 + 0.1215493807161101E+00 + 0.1214457769521252E+00 + 0.1213422486732938E+00 + 0.1212387958333326E+00 + 0.1211354183796217E+00 + 0.1210321162604791E+00 + 0.1209288894308410E+00 + 0.1208257378484549E+00 + 0.1207226614715026E+00 + 0.1206196602614216E+00 + 0.1205167341811554E+00 + 0.1204138831929595E+00 + 0.1203111072531742E+00 + 0.1202084063151597E+00 + 0.1201057803330032E+00 + 0.1200032292678463E+00 + 0.1199007530846980E+00 + 0.1197983517477246E+00 + 0.1196960252118668E+00 + 0.1195937734265695E+00 + 0.1194915963415921E+00 + 0.1193894939112187E+00 + 0.1192874660926600E+00 + 0.1191855128434182E+00 + 0.1190836341241628E+00 + 0.1189818298977859E+00 + 0.1188801001268924E+00 + 0.1187784447691928E+00 + 0.1186768637786716E+00 + 0.1185753571095018E+00 + 0.1184739247205459E+00 + 0.1183725665745339E+00 + 0.1182712826341727E+00 + 0.1181700728595313E+00 + 0.1180689372083208E+00 + 0.1179678756379536E+00 + 0.1178668881011496E+00 + 0.1177659745460862E+00 + 0.1176651349211678E+00 + 0.1175643691851859E+00 + 0.1174636773078285E+00 + 0.1173630592590767E+00 + 0.1172625150023930E+00 + 0.1171620444938314E+00 + 0.1170616476889563E+00 + 0.1169613245402861E+00 + 0.1168610749965874E+00 + 0.1167608990066075E+00 + 0.1166607965278469E+00 + 0.1165607675294917E+00 + 0.1164608119814330E+00 + 0.1163609298481086E+00 + 0.1162611210860595E+00 + 0.1161613856511602E+00 + 0.1160617234962515E+00 + 0.1159621345694078E+00 + 0.1158626188183984E+00 + 0.1157631761998599E+00 + 0.1156638066855593E+00 + 0.1155645102486482E+00 + 0.1154652868526793E+00 + 0.1153661364434064E+00 + 0.1152670589647115E+00 + 0.1151680543688765E+00 + 0.1150691226251266E+00 + 0.1149702637047021E+00 + 0.1148714775743553E+00 + 0.1147727641909808E+00 + 0.1146741235101558E+00 + 0.1145755554853679E+00 + 0.1144770600651000E+00 + 0.1143786371971139E+00 + 0.1142802868354786E+00 + 0.1141820089507471E+00 + 0.1140838035161263E+00 + 0.1139856704980944E+00 + 0.1138876098439152E+00 + 0.1137896214974457E+00 + 0.1136917054083121E+00 + 0.1135938615441656E+00 + 0.1134960898761686E+00 + 0.1133983903725322E+00 + 0.1133007629913668E+00 + 0.1132032076886245E+00 + 0.1131057244185563E+00 + 0.1130083131290361E+00 + 0.1129109737664428E+00 + 0.1128137062823350E+00 + 0.1127165106495670E+00 + 0.1126193868464659E+00 + 0.1125223348466373E+00 + 0.1124253546024027E+00 + 0.1123284460600871E+00 + 0.1122316091673330E+00 + 0.1121348438782975E+00 + 0.1120381501491485E+00 + 0.1119415279377704E+00 + 0.1118449772113652E+00 + 0.1117484979402810E+00 + 0.1116520900923098E+00 + 0.1115557536199824E+00 + 0.1114594884701940E+00 + 0.1113632945913004E+00 + 0.1112671719413012E+00 + 0.1111711204820851E+00 + 0.1110751401761216E+00 + 0.1109792309900086E+00 + 0.1108833928921589E+00 + 0.1107876258494705E+00 + 0.1106919298166815E+00 + 0.1105963047427043E+00 + 0.1105007505768974E+00 + 0.1104052672728877E+00 + 0.1103098547865279E+00 + 0.1102145130744881E+00 + 0.1101192421012658E+00 + 0.1100240418357958E+00 + 0.1099289122461918E+00 + 0.1098338532910465E+00 + 0.1097388649230889E+00 + 0.1096439470953880E+00 + 0.1095490997662013E+00 + 0.1094543228972558E+00 + 0.1093596164503941E+00 + 0.1092649803881808E+00 + 0.1091704146737038E+00 + 0.1090759192695651E+00 + 0.1089814941306829E+00 + 0.1088871392059354E+00 + 0.1087928544444245E+00 + 0.1086986398020277E+00 + 0.1086044952403952E+00 + 0.1085104207214864E+00 + 0.1084164162097591E+00 + 0.1083224816719761E+00 + 0.1082286170747451E+00 + 0.1081348223791029E+00 + 0.1080410975405170E+00 + 0.1079474425141841E+00 + 0.1078538572545543E+00 + 0.1077603417152675E+00 + 0.1076668958501786E+00 + 0.1075735196211174E+00 + 0.1074802129992748E+00 + 0.1073869759560621E+00 + 0.1072938084512296E+00 + 0.1072007104296941E+00 + 0.1071076818356650E+00 + 0.1070147226246569E+00 + 0.1069218327677753E+00 + 0.1068290122371206E+00 + 0.1067362609969359E+00 + 0.1066435789997092E+00 + 0.1065509661970258E+00 + 0.1064584225445900E+00 + 0.1063659480047947E+00 + 0.1062735425406315E+00 + 0.1061812061138569E+00 + 0.1060889386840495E+00 + 0.1059967402105742E+00 + 0.1059046106537874E+00 + 0.1058125499759458E+00 + 0.1057205581395050E+00 + 0.1056286351042935E+00 + 0.1055367808246571E+00 + 0.1054449952542673E+00 + 0.1053532783497413E+00 + 0.1052616300743945E+00 + 0.1051700503924599E+00 + 0.1050785392650717E+00 + 0.1049870966456797E+00 + 0.1048957224865683E+00 + 0.1048044167437960E+00 + 0.1047131793836431E+00 + 0.1046220103741015E+00 + 0.1045309096814354E+00 + 0.1044398772667924E+00 + 0.1043489130903772E+00 + 0.1042580171111457E+00 + 0.1041671892840058E+00 + 0.1040764295630466E+00 + 0.1039857379043621E+00 + 0.1038951142711607E+00 + 0.1038045586282290E+00 + 0.1037140709377634E+00 + 0.1036236511518834E+00 + 0.1035332992202569E+00 + 0.1034430150969586E+00 + 0.1033527987548656E+00 + 0.1032626501718683E+00 + 0.1031725693211584E+00 + 0.1030825561539434E+00 + 0.1029926106150058E+00 + 0.1029027326514416E+00 + 0.1028129222222245E+00 + 0.1027231792901296E+00 + 0.1026335038184261E+00 + 0.1025438957731555E+00 + 0.1024543551213305E+00 + 0.1023648818285661E+00 + 0.1022754758518111E+00 + 0.1021861371446986E+00 + 0.1020968656614360E+00 + 0.1020076613601927E+00 + 0.1019185242007936E+00 + 0.1018294541439148E+00 + 0.1017404511566001E+00 + 0.1016515152087911E+00 + 0.1015626462685768E+00 + 0.1014738442885134E+00 + 0.1013851092134573E+00 + 0.1012964409899057E+00 + 0.1012078395799833E+00 + 0.1011193049542427E+00 + 0.1010308370825379E+00 + 0.1009424359267310E+00 + 0.1008541014439997E+00 + 0.1007658335918001E+00 + 0.1006776323314372E+00 + 0.1005894976266666E+00 + 0.1005014294407039E+00 + 0.1004134277293665E+00 + 0.1003254924433619E+00 + 0.1002376235342258E+00 + 0.1001498209668456E+00 + 0.1000620847161101E+00 + 0.9997441475628243E-01 + 0.9988681104754434E-01 + 0.9979927353864429E-01 + 0.9971180217848746E-01 + 0.9962439692497204E-01 + 0.9953705774390871E-01 + 0.9944978460120874E-01 + 0.9936257745920441E-01 + 0.9927543627681562E-01 + 0.9918836101288290E-01 + 0.9910135162761414E-01 + 0.9901440808263068E-01 + 0.9892753033958417E-01 + 0.9884071835915240E-01 + 0.9875397210092311E-01 + 0.9866729152444458E-01 + 0.9858067658987487E-01 + 0.9849412725811064E-01 + 0.9840764349010161E-01 + 0.9832122524713610E-01 + 0.9823487249094818E-01 + 0.9814858518328107E-01 + 0.9806236328488136E-01 + 0.9797620675507424E-01 + 0.9789011555309466E-01 + 0.9780408963925327E-01 + 0.9771812897552481E-01 + 0.9763223352401415E-01 + 0.9754640324591929E-01 + 0.9746063810091460E-01 + 0.9737493804853987E-01 + 0.9728930304937183E-01 + 0.9720373306588016E-01 + 0.9711822806072718E-01 + 0.9703278799548622E-01 + 0.9694741282956985E-01 + 0.9686210252213961E-01 + 0.9677685703302094E-01 + 0.9669167632347230E-01 + 0.9660656035494027E-01 + 0.9652150908909501E-01 + 0.9643652248813528E-01 + 0.9635160051433324E-01 + 0.9626674312909499E-01 + 0.9618195029159958E-01 + 0.9609722196067503E-01 + 0.9601255809615939E-01 + 0.9592795866072583E-01 + 0.9584342361754089E-01 + 0.9575895292909753E-01 + 0.9567454655582235E-01 + 0.9559020445774682E-01 + 0.9550592659524481E-01 + 0.9542171292984154E-01 + 0.9533756342330367E-01 + 0.9525347803709977E-01 + 0.9516945673159833E-01 + 0.9508549946691524E-01 + 0.9500160620361417E-01 + 0.9491777690406780E-01 + 0.9483401153110577E-01 + 0.9475031004714586E-01 + 0.9466667241278397E-01 + 0.9458309858811164E-01 + 0.9449958853346223E-01 + 0.9441614221034273E-01 + 0.9433275958061598E-01 + 0.9424944060614036E-01 + 0.9416618524875045E-01 + 0.9408299347027311E-01 + 0.9399986523235411E-01 + 0.9391680049557829E-01 + 0.9383379922014575E-01 + 0.9375086136647916E-01 + 0.9366798689644121E-01 + 0.9358517577246449E-01 + 0.9350242795690782E-01 + 0.9341974341159274E-01 + 0.9333712209810912E-01 + 0.9325456397796522E-01 + 0.9317206901203985E-01 + 0.9308963716091487E-01 + 0.9300726838536289E-01 + 0.9292496264782610E-01 + 0.9284271991160232E-01 + 0.9276054013978310E-01 + 0.9267842329340615E-01 + 0.9259636933236488E-01 + 0.9251437821666848E-01 + 0.9243244990770283E-01 + 0.9235058436768727E-01 + 0.9226878155887624E-01 + 0.9218704144380320E-01 + 0.9210536398518482E-01 + 0.9202374914565192E-01 + 0.9194219688664330E-01 + 0.9186070716874692E-01 + 0.9177927995259122E-01 + 0.9169791519968930E-01 + 0.9161661287223893E-01 + 0.9153537293245185E-01 + 0.9145419534247633E-01 + 0.9137308006440764E-01 + 0.9129202706030959E-01 + 0.9121103629166484E-01 + 0.9113010771942760E-01 + 0.9104924130458901E-01 + 0.9096843700939628E-01 + 0.9088769479733299E-01 + 0.9080701463188509E-01 + 0.9072639647525072E-01 + 0.9064584028825490E-01 + 0.9056534603168583E-01 + 0.9048491366723855E-01 + 0.9040454315765611E-01 + 0.9032423446572679E-01 + 0.9024398755377973E-01 + 0.9016380238356849E-01 + 0.9008367891681189E-01 + 0.9000361711528370E-01 + 0.8992361694083330E-01 + 0.8984367835531904E-01 + 0.8976380132080449E-01 + 0.8968398579965495E-01 + 0.8960423175425946E-01 + 0.8952453914696257E-01 + 0.8944490794003844E-01 + 0.8936533809575458E-01 + 0.8928582957636222E-01 + 0.8920638234408418E-01 + 0.8912699636114137E-01 + 0.8904767158985544E-01 + 0.8896840799273827E-01 + 0.8888920553232049E-01 + 0.8881006417076891E-01 + 0.8873098386950385E-01 + 0.8865196458985693E-01 + 0.8857300629382305E-01 + 0.8849410894487841E-01 + 0.8841527250669923E-01 + 0.8833649694250816E-01 + 0.8825778221442381E-01 + 0.8817912828439932E-01 + 0.8810053511444606E-01 + 0.8802200266672877E-01 + 0.8794353090343778E-01 + 0.8786511978693854E-01 + 0.8778676928010551E-01 + 0.8770847934590513E-01 + 0.8763024994705731E-01 + 0.8755208104549762E-01 + 0.8747397260300581E-01 + 0.8739592458170787E-01 + 0.8731793694493572E-01 + 0.8724000965628427E-01 + 0.8716214267904103E-01 + 0.8708433597531878E-01 + 0.8700658950694958E-01 + 0.8692890323591296E-01 + 0.8685127712480425E-01 + 0.8677371113638085E-01 + 0.8669620523343120E-01 + 0.8661875937888926E-01 + 0.8654137353573011E-01 + 0.8646404766697589E-01 + 0.8638678173588556E-01 + 0.8630957570579229E-01 + 0.8623242953983381E-01 + 0.8615534320006590E-01 + 0.8607831664817224E-01 + 0.8600134984604223E-01 + 0.8592444275681785E-01 + 0.8584759534411216E-01 + 0.8577080757137045E-01 + 0.8569407940090983E-01 + 0.8561741079458427E-01 + 0.8554080171449929E-01 + 0.8546425212462726E-01 + 0.8538776198977649E-01 + 0.8531133127448452E-01 + 0.8523495994105101E-01 + 0.8515864795068461E-01 + 0.8508239526477899E-01 + 0.8500620184646703E-01 + 0.8493006765980372E-01 + 0.8485399266877153E-01 + 0.8477797683653719E-01 + 0.8470202012579797E-01 + 0.8462612249926950E-01 + 0.8455028391994080E-01 + 0.8447450435097139E-01 + 0.8439878375550068E-01 + 0.8432312209637914E-01 + 0.8424751933626119E-01 + 0.8417197543785910E-01 + 0.8409649036474796E-01 + 0.8402106408113975E-01 + 0.8394569655121121E-01 + 0.8387038773835359E-01 + 0.8379513760532959E-01 + 0.8371994611488582E-01 + 0.8364481322978802E-01 + 0.8356973891281958E-01 + 0.8349472312679595E-01 + 0.8341976583518907E-01 + 0.8334486700208624E-01 + 0.8327002659157795E-01 + 0.8319524456726157E-01 + 0.8312052089223293E-01 + 0.8304585552957672E-01 + 0.8297124844268188E-01 + 0.8289669959527274E-01 + 0.8282220895106903E-01 + 0.8274777647307769E-01 + 0.8267340212345536E-01 + 0.8259908586434882E-01 + 0.8252482765945015E-01 + 0.8245062747444930E-01 + 0.8237648527513004E-01 + 0.8230240102545377E-01 + 0.8222837468682670E-01 + 0.8215440622048991E-01 + 0.8208049558916112E-01 + 0.8200664275780444E-01 + 0.8193284769155985E-01 + 0.8185911035467397E-01 + 0.8178543070991722E-01 + 0.8171180871992871E-01 + 0.8163824434795984E-01 + 0.8156473755836087E-01 + 0.8149128831559521E-01 + 0.8141789658396988E-01 + 0.8134456232748656E-01 + 0.8127128551010847E-01 + 0.8119806609521202E-01 + 0.8112490404492815E-01 + 0.8105179932123285E-01 + 0.8097875188724546E-01 + 0.8090576170873137E-01 + 0.8083282875182679E-01 + 0.8075995298167365E-01 + 0.8068713436090480E-01 + 0.8061437285176375E-01 + 0.8054166841715468E-01 + 0.8046902102180395E-01 + 0.8039643063074875E-01 + 0.8032389720837779E-01 + 0.8025142071712232E-01 + 0.8017900111904673E-01 + 0.8010663837717614E-01 + 0.8003433245771003E-01 + 0.7996208332750161E-01 + 0.7988989095240950E-01 + 0.7981775529469363E-01 + 0.7974567631580067E-01 + 0.7967365397783373E-01 + 0.7960168824549918E-01 + 0.7952977908414848E-01 + 0.7945792645888971E-01 + 0.7938613033377079E-01 + 0.7931439067255232E-01 + 0.7924270743903681E-01 + 0.7917108059722899E-01 + 0.7909951011119356E-01 + 0.7902799594504220E-01 + 0.7895653806313310E-01 + 0.7888513642990481E-01 + 0.7881379100983637E-01 + 0.7874250176763886E-01 + 0.7867126866810683E-01 + 0.7860009167585086E-01 + 0.7852897075432129E-01 + 0.7845790586651598E-01 + 0.7838689697566280E-01 + 0.7831594404659620E-01 + 0.7824504704483361E-01 + 0.7817420593574570E-01 + 0.7810342068355803E-01 + 0.7803269125196570E-01 + 0.7796201760469548E-01 + 0.7789139970576740E-01 + 0.7782083751934921E-01 + 0.7775033100974270E-01 + 0.7767988014249999E-01 + 0.7760948488385893E-01 + 0.7753914519981330E-01 + 0.7746886105372685E-01 + 0.7739863240739552E-01 + 0.7732845922284128E-01 + 0.7725834146496852E-01 + 0.7718827910054740E-01 + 0.7711827209626408E-01 + 0.7704832041729759E-01 + 0.7697842402776820E-01 + 0.7690858289174935E-01 + 0.7683879697294646E-01 + 0.7676906623478441E-01 + 0.7669939064078392E-01 + 0.7662977015617728E-01 + 0.7656020474760962E-01 + 0.7649069438166807E-01 + 0.7642123902303086E-01 + 0.7635183863466992E-01 + 0.7628249317956848E-01 + 0.7621320262227362E-01 + 0.7614396692884701E-01 + 0.7607478606536428E-01 + 0.7600565999668197E-01 + 0.7593658868637694E-01 + 0.7586757209800986E-01 + 0.7579861019644330E-01 + 0.7572970294802149E-01 + 0.7566085031913694E-01 + 0.7559205227508803E-01 + 0.7552330877982358E-01 + 0.7545461979721802E-01 + 0.7538598529149589E-01 + 0.7531740522735019E-01 + 0.7524887956951607E-01 + 0.7518040828322274E-01 + 0.7511199133441505E-01 + 0.7504362868908425E-01 + 0.7497532031261606E-01 + 0.7490706616944416E-01 + 0.7483886622392300E-01 + 0.7477072044075948E-01 + 0.7470262878526190E-01 + 0.7463459122279669E-01 + 0.7456660771864472E-01 + 0.7449867823792839E-01 + 0.7443080274575276E-01 + 0.7436298120723257E-01 + 0.7429521358750206E-01 + 0.7422749985169780E-01 + 0.7415983996499564E-01 + 0.7409223389265694E-01 + 0.7402468159995421E-01 + 0.7395718305200600E-01 + 0.7388973821356210E-01 + 0.7382234704931956E-01 + 0.7375500952451262E-01 + 0.7368772560578223E-01 + 0.7362049525999559E-01 + 0.7355331845314939E-01 + 0.7348619514875221E-01 + 0.7341912530987114E-01 + 0.7335210890050467E-01 + 0.7328514588756287E-01 + 0.7321823623852365E-01 + 0.7315137992027005E-01 + 0.7308457689764992E-01 + 0.7301782713507534E-01 + 0.7295113059720459E-01 + 0.7288448724961834E-01 + 0.7281789705811369E-01 + 0.7275135998843625E-01 + 0.7268487600611905E-01 + 0.7261844507664050E-01 + 0.7255206716546283E-01 + 0.7248574223797527E-01 + 0.7241947025954659E-01 + 0.7235325119564687E-01 + 0.7228708501224718E-01 + 0.7222097167547334E-01 + 0.7215491115135881E-01 + 0.7208890340543595E-01 + 0.7202294840306735E-01 + 0.7195704610963115E-01 + 0.7189119649059644E-01 + 0.7182539951146651E-01 + 0.7175965513776407E-01 + 0.7169396333514109E-01 + 0.7162832406930110E-01 + 0.7156273730605404E-01 + 0.7149720301197688E-01 + 0.7143172115398428E-01 + 0.7136629169876706E-01 + 0.7130091461121577E-01 + 0.7123558985535825E-01 + 0.7117031739548524E-01 + 0.7110509719826490E-01 + 0.7103992923160538E-01 + 0.7097481346317817E-01 + 0.7090974985822493E-01 + 0.7084473838060900E-01 + 0.7077977899437849E-01 + 0.7071487166577639E-01 + 0.7065001636239798E-01 + 0.7058521305174814E-01 + 0.7052046169998288E-01 + 0.7045576227235605E-01 + 0.7039111473416236E-01 + 0.7032651905148662E-01 + 0.7026197519098652E-01 + 0.7019748311929121E-01 + 0.7013304280238899E-01 + 0.7006865420576402E-01 + 0.7000431729492240E-01 + 0.6994003203599590E-01 + 0.6987579839564968E-01 + 0.6981161634052914E-01 + 0.6974748583653655E-01 + 0.6968340684888825E-01 + 0.6961937934282902E-01 + 0.6955540328484863E-01 + 0.6949147864268289E-01 + 0.6942760538407971E-01 + 0.6936378347566603E-01 + 0.6930001288285314E-01 + 0.6923629357100141E-01 + 0.6917262550577538E-01 + 0.6910900865319743E-01 + 0.6904544297933100E-01 + 0.6898192845100590E-01 + 0.6891846503602737E-01 + 0.6885505270223115E-01 + 0.6879169141598101E-01 + 0.6872838114160960E-01 + 0.6866512184333050E-01 + 0.6860191348698402E-01 + 0.6853875604084480E-01 + 0.6847564947337327E-01 + 0.6841259375206138E-01 + 0.6834958884282796E-01 + 0.6828663471144775E-01 + 0.6822373132370998E-01 + 0.6816087864542968E-01 + 0.6809807664243131E-01 + 0.6803532528134325E-01 + 0.6797262453033572E-01 + 0.6790997435774711E-01 + 0.6784737473081709E-01 + 0.6778482561449213E-01 + 0.6772232697343511E-01 + 0.6765987877330960E-01 + 0.6759748098205520E-01 + 0.6753513356792520E-01 + 0.6747283649863550E-01 + 0.6741058974056834E-01 + 0.6734839325990265E-01 + 0.6728624702291254E-01 + 0.6722415099613062E-01 + 0.6716210514613269E-01 + 0.6710010943960288E-01 + 0.6703816384354562E-01 + 0.6697626832502440E-01 + 0.6691442285106347E-01 + 0.6685262738855982E-01 + 0.6679088190438466E-01 + 0.6672918636546182E-01 + 0.6666754073890258E-01 + 0.6660594499185979E-01 + 0.6654439909132641E-01 + 0.6648290300367254E-01 + 0.6642145669511662E-01 + 0.6636006013207995E-01 + 0.6629871328185026E-01 + 0.6623741611194649E-01 + 0.6617616858989370E-01 + 0.6611497068324590E-01 + 0.6605382235956572E-01 + 0.6599272358622628E-01 + 0.6593167432962675E-01 + 0.6587067455585443E-01 + 0.6580972423117581E-01 + 0.6574882332287041E-01 + 0.6568797179857215E-01 + 0.6562716962587363E-01 + 0.6556641677210626E-01 + 0.6550571320450177E-01 + 0.6544505889029761E-01 + 0.6538445379677265E-01 + 0.6532389789122288E-01 + 0.6526339114095635E-01 + 0.6520293351337231E-01 + 0.6514252497591116E-01 + 0.6508216549596608E-01 + 0.6502185504053281E-01 + 0.6496159357641046E-01 + 0.6490138107041434E-01 + 0.6484121748952493E-01 + 0.6478110280081120E-01 + 0.6472103697144194E-01 + 0.6466101996959582E-01 + 0.6460105176404396E-01 + 0.6454113232342418E-01 + 0.6448126161476198E-01 + 0.6442143960405629E-01 + 0.6436166625742159E-01 + 0.6430194154266050E-01 + 0.6424226542874240E-01 + 0.6418263788455483E-01 + 0.6412305887747298E-01 + 0.6406352837373865E-01 + 0.6400404633961920E-01 + 0.6394461274224467E-01 + 0.6388522754944594E-01 + 0.6382589072908923E-01 + 0.6376660224931627E-01 + 0.6370736207851129E-01 + 0.6364817018502875E-01 + 0.6358902653641545E-01 + 0.6352993109944798E-01 + 0.6347088384090574E-01 + 0.6341188472838548E-01 + 0.6335293373032867E-01 + 0.6329403081520000E-01 + 0.6323517595102155E-01 + 0.6317636910531947E-01 + 0.6311761024559440E-01 + 0.6305889933936008E-01 + 0.6300023635414708E-01 + 0.6294162125749541E-01 + 0.6288305401729735E-01 + 0.6282453460190771E-01 + 0.6276606297970231E-01 + 0.6270763911855013E-01 + 0.6264926298559697E-01 + 0.6259093454794689E-01 + 0.6253265377350969E-01 + 0.6247442063144193E-01 + 0.6241623509099263E-01 + 0.6235809712032992E-01 + 0.6230000668580608E-01 + 0.6224196375361220E-01 + 0.6218396829116055E-01 + 0.6212602026809302E-01 + 0.6206811965428138E-01 + 0.6201026641863816E-01 + 0.6195246052817117E-01 + 0.6189470194966722E-01 + 0.6183699065055549E-01 + 0.6177932659965517E-01 + 0.6172170976596501E-01 + 0.6166414011808876E-01 + 0.6160661762369880E-01 + 0.6154914225033439E-01 + 0.6149171396590542E-01 + 0.6143433273927403E-01 + 0.6137699853945304E-01 + 0.6131971133492405E-01 + 0.6126247109267839E-01 + 0.6120527777944775E-01 + 0.6114813136268101E-01 + 0.6109103181202952E-01 + 0.6103397909756638E-01 + 0.6097697318887883E-01 + 0.6092001405391986E-01 + 0.6086310166029931E-01 + 0.6080623597563502E-01 + 0.6074941696757526E-01 + 0.6069264460377537E-01 + 0.6063591885226679E-01 + 0.6057923968260218E-01 + 0.6052260706471801E-01 + 0.6046602096814471E-01 + 0.6040948136061263E-01 + 0.6035298820935364E-01 + 0.6029654148188222E-01 + 0.6024014114708476E-01 + 0.6018378717426451E-01 + 0.6012747953256787E-01 + 0.6007121819030633E-01 + 0.6001500311551365E-01 + 0.5995883427631831E-01 + 0.5990271164140322E-01 + 0.5984663517965279E-01 + 0.5979060485995377E-01 + 0.5973462065120661E-01 + 0.5967868252231733E-01 + 0.5962279044210826E-01 + 0.5956694437880717E-01 + 0.5951114430038449E-01 + 0.5945539017493458E-01 + 0.5939968197153192E-01 + 0.5934401965971256E-01 + 0.5928840320894288E-01 + 0.5923283258805760E-01 + 0.5917730776556795E-01 + 0.5912182871000695E-01 + 0.5906639539014604E-01 + 0.5901100777488914E-01 + 0.5895566583311127E-01 + 0.5890036953336097E-01 + 0.5884511884398865E-01 + 0.5878991373342974E-01 + 0.5873475417116531E-01 + 0.5867964012736504E-01 + 0.5862457157210853E-01 + 0.5856954847410792E-01 + 0.5851457080109840E-01 + 0.5845963852085019E-01 + 0.5840475160197700E-01 + 0.5834991001374606E-01 + 0.5829511372545660E-01 + 0.5824036270666721E-01 + 0.5818565692715396E-01 + 0.5813099635666351E-01 + 0.5807638096423549E-01 + 0.5802181071826666E-01 + 0.5796728558714831E-01 + 0.5791280553967150E-01 + 0.5785837054502156E-01 + 0.5780398057240498E-01 + 0.5774963559114425E-01 + 0.5769533557068569E-01 + 0.5764108048048647E-01 + 0.5758687029014796E-01 + 0.5753270496943859E-01 + 0.5747858448811758E-01 + 0.5742450881528693E-01 + 0.5737047791922487E-01 + 0.5731649176817238E-01 + 0.5726255033100360E-01 + 0.5720865357745288E-01 + 0.5715480147731281E-01 + 0.5710099400021687E-01 + 0.5704723111556379E-01 + 0.5699351279273417E-01 + 0.5693983900114233E-01 + 0.5688620971025681E-01 + 0.5683262488955101E-01 + 0.5677908450851298E-01 + 0.5672558853665598E-01 + 0.5667213694349515E-01 + 0.5661872969846067E-01 + 0.5656536677082276E-01 + 0.5651204812983589E-01 + 0.5645877374505972E-01 + 0.5640554358668063E-01 + 0.5635235762496015E-01 + 0.5629921582970101E-01 + 0.5624611816968064E-01 + 0.5619306461353811E-01 + 0.5614005513022226E-01 + 0.5608708968943761E-01 + 0.5603416826100208E-01 + 0.5598129081503087E-01 + 0.5592845732242968E-01 + 0.5587566775423396E-01 + 0.5582292208060067E-01 + 0.5577022026913072E-01 + 0.5571756228696252E-01 + 0.5566494810242819E-01 + 0.5561237768766196E-01 + 0.5555985101555345E-01 + 0.5550736805781602E-01 + 0.5545492878205801E-01 + 0.5540253315499291E-01 + 0.5535018114438320E-01 + 0.5529787272200439E-01 + 0.5524560786059094E-01 + 0.5519338653208671E-01 + 0.5514120870511974E-01 + 0.5508907434744915E-01 + 0.5503698342728242E-01 + 0.5498493591489000E-01 + 0.5493293178113450E-01 + 0.5488097099675140E-01 + 0.5482905353183258E-01 + 0.5477717935626785E-01 + 0.5472534844004013E-01 + 0.5467356075364988E-01 + 0.5462181626777523E-01 + 0.5457011495286215E-01 + 0.5451845677794066E-01 + 0.5446684171150808E-01 + 0.5441526972240763E-01 + 0.5436374078180693E-01 + 0.5431225486182836E-01 + 0.5426081193428035E-01 + 0.5420941196862959E-01 + 0.5415805493329389E-01 + 0.5410674079688345E-01 + 0.5405546952961934E-01 + 0.5400424110250855E-01 + 0.5395305548654859E-01 + 0.5390191265260413E-01 + 0.5385081257146938E-01 + 0.5379975521383587E-01 + 0.5374874054937062E-01 + 0.5369776854714957E-01 + 0.5364683917638685E-01 + 0.5359595240792335E-01 + 0.5354510821361931E-01 + 0.5349430656521374E-01 + 0.5344354743273227E-01 + 0.5339283078503552E-01 + 0.5334215659107375E-01 + 0.5329152482137319E-01 + 0.5324093544762230E-01 + 0.5319038844146988E-01 + 0.5313988377350025E-01 + 0.5308942141344717E-01 + 0.5303900133104406E-01 + 0.5298862349645277E-01 + 0.5293828788020596E-01 + 0.5288799445286820E-01 + 0.5283774318540977E-01 + 0.5278753404918131E-01 + 0.5273736701550922E-01 + 0.5268724205478756E-01 + 0.5263715913646260E-01 + 0.5258711822998295E-01 + 0.5253711930603445E-01 + 0.5248716233666626E-01 + 0.5243724729396519E-01 + 0.5238737414895695E-01 + 0.5233754287140064E-01 + 0.5228775343098693E-01 + 0.5223800579763800E-01 + 0.5218829994157560E-01 + 0.5213863583306157E-01 + 0.5208901344329135E-01 + 0.5203943274477060E-01 + 0.5198989371007976E-01 + 0.5194039631047296E-01 + 0.5189094051518461E-01 + 0.5184152629329526E-01 + 0.5179215361500965E-01 + 0.5174282245238980E-01 + 0.5169353277766243E-01 + 0.5164428456215874E-01 + 0.5159507777560259E-01 + 0.5154591238755836E-01 + 0.5149678836860666E-01 + 0.5144770569131238E-01 + 0.5139866432846345E-01 + 0.5134966425172925E-01 + 0.5130070543040167E-01 + 0.5125178783347214E-01 + 0.5120291143085507E-01 + 0.5115407619460316E-01 + 0.5110528209707032E-01 + 0.5105652911034558E-01 + 0.5100781720584863E-01 + 0.5095914635489439E-01 + 0.5091051652847545E-01 + 0.5086192769669355E-01 + 0.5081337982949872E-01 + 0.5076487289731853E-01 + 0.5071640687202370E-01 + 0.5066798172575593E-01 + 0.5061959743046902E-01 + 0.5057125395749619E-01 + 0.5052295127804247E-01 + 0.5047468936320255E-01 + 0.5042646818367073E-01 + 0.5037828771005105E-01 + 0.5033014791314639E-01 + 0.5028204876455096E-01 + 0.5023399023605482E-01 + 0.5018597229947376E-01 + 0.5013799492673449E-01 + 0.5009005808979401E-01 + 0.5004216176035153E-01 + 0.4999430590887722E-01 + 0.4994649050547462E-01 + 0.4989871552061697E-01 + 0.4985098092671180E-01 + 0.4980328669679834E-01 + 0.4975563280352712E-01 + 0.4970801921731295E-01 + 0.4966044590777260E-01 + 0.4961291284496003E-01 + 0.4956542000170053E-01 + 0.4951796735189945E-01 + 0.4947055486899656E-01 + 0.4942318252316928E-01 + 0.4937585028320781E-01 + 0.4932855811833902E-01 + 0.4928130600118701E-01 + 0.4923409390595060E-01 + 0.4918692180657435E-01 + 0.4913978967476782E-01 + 0.4909269748111223E-01 + 0.4904564519621206E-01 + 0.4899863279096973E-01 + 0.4895166023645171E-01 + 0.4890472750381900E-01 + 0.4885783456520479E-01 + 0.4881098139332242E-01 + 0.4876416796086137E-01 + 0.4871739424014395E-01 + 0.4867066020325432E-01 + 0.4862396582221980E-01 + 0.4857731106837332E-01 + 0.4853069591256013E-01 + 0.4848412032566336E-01 + 0.4843758427927500E-01 + 0.4839108774552703E-01 + 0.4834463069657499E-01 + 0.4829821310473852E-01 + 0.4825183494247300E-01 + 0.4820549618222704E-01 + 0.4815919679624175E-01 + 0.4811293675657259E-01 + 0.4806671603524992E-01 + 0.4802053460390195E-01 + 0.4797439243376655E-01 + 0.4792828949609473E-01 + 0.4788222576286772E-01 + 0.4783620120683421E-01 + 0.4779021580076213E-01 + 0.4774426951692066E-01 + 0.4769836232701124E-01 + 0.4765249420271357E-01 + 0.4760666511602338E-01 + 0.4756087503932626E-01 + 0.4751512394503485E-01 + 0.4746941180568967E-01 + 0.4742373859400239E-01 + 0.4737810428268112E-01 + 0.4733250884366208E-01 + 0.4728695224776168E-01 + 0.4724143446572838E-01 + 0.4719595546954041E-01 + 0.4715051523311117E-01 + 0.4710511373051155E-01 + 0.4705975093484265E-01 + 0.4701442681754836E-01 + 0.4696914134991486E-01 + 0.4692389450367952E-01 + 0.4687868625141817E-01 + 0.4683351656579631E-01 + 0.4678838541930114E-01 + 0.4674329278405928E-01 + 0.4669823863215540E-01 + 0.4665322293594540E-01 + 0.4660824566838254E-01 + 0.4656330680249846E-01 + 0.4651840631104289E-01 + 0.4647354416608921E-01 + 0.4642872033961193E-01 + 0.4638393480386510E-01 + 0.4633918753183411E-01 + 0.4629447849662229E-01 + 0.4624980767103451E-01 + 0.4620517502702172E-01 + 0.4616058053638332E-01 + 0.4611602417132633E-01 + 0.4607150590533377E-01 + 0.4602702571213756E-01 + 0.4598258356505967E-01 + 0.4593817943601715E-01 + 0.4589381329662612E-01 + 0.4584948511889661E-01 + 0.4580519487631692E-01 + 0.4576094254272250E-01 + 0.4571672809155235E-01 + 0.4567255149461186E-01 + 0.4562841272328623E-01 + 0.4558431174944245E-01 + 0.4554024854712291E-01 + 0.4549622309098384E-01 + 0.4545223535512466E-01 + 0.4540828531088660E-01 + 0.4536437292875855E-01 + 0.4532049817980622E-01 + 0.4527666103823369E-01 + 0.4523286147930669E-01 + 0.4518909947783822E-01 + 0.4514537500593137E-01 + 0.4510168803468705E-01 + 0.4505803853552390E-01 + 0.4501442648196044E-01 + 0.4497085184836275E-01 + 0.4492731460888609E-01 + 0.4488381473613934E-01 + 0.4484035220205078E-01 + 0.4479692697871601E-01 + 0.4475353903959503E-01 + 0.4471018835880220E-01 + 0.4466687491031706E-01 + 0.4462359866688745E-01 + 0.4458035960061816E-01 + 0.4453715768370391E-01 + 0.4449399288927816E-01 + 0.4445086519100747E-01 + 0.4440777456256637E-01 + 0.4436472097765067E-01 + 0.4432170440996895E-01 + 0.4427872483315051E-01 + 0.4423578221984998E-01 + 0.4419287654206997E-01 + 0.4415000777190226E-01 + 0.4410717588283069E-01 + 0.4406438084934933E-01 + 0.4402162264590889E-01 + 0.4397890124593441E-01 + 0.4393621662204384E-01 + 0.4389356874685812E-01 + 0.4385095759343480E-01 + 0.4380838313520425E-01 + 0.4376584534562591E-01 + 0.4372334419850334E-01 + 0.4368087966795822E-01 + 0.4363845172809379E-01 + 0.4359606035231629E-01 + 0.4355370551333354E-01 + 0.4351138718383724E-01 + 0.4346910533689668E-01 + 0.4342685994599114E-01 + 0.4338465098462497E-01 + 0.4334247842644412E-01 + 0.4330034224526107E-01 + 0.4325824241489823E-01 + 0.4321617890919675E-01 + 0.4317415170202154E-01 + 0.4313216076723475E-01 + 0.4309020607849852E-01 + 0.4304828760919931E-01 + 0.4300640533270184E-01 + 0.4296455922229575E-01 + 0.4292274925115764E-01 + 0.4288097539246178E-01 + 0.4283923761984660E-01 + 0.4279753590770570E-01 + 0.4275587023049918E-01 + 0.4271424056246026E-01 + 0.4267264687742078E-01 + 0.4263108914916958E-01 + 0.4258956735125295E-01 + 0.4254808145675131E-01 + 0.4250663143869527E-01 + 0.4246521727058267E-01 + 0.4242383892688818E-01 + 0.4238249638220747E-01 + 0.4234118961080168E-01 + 0.4229991858616945E-01 + 0.4225868328170485E-01 + 0.4221748367108388E-01 + 0.4217631972868399E-01 + 0.4213519142898898E-01 + 0.4209409874624185E-01 + 0.4205304165403146E-01 + 0.4201202012583706E-01 + 0.4197103413530946E-01 + 0.4193008365660808E-01 + 0.4188916866398615E-01 + 0.4184828913170994E-01 + 0.4180744503408840E-01 + 0.4176663634543908E-01 + 0.4172586303988656E-01 + 0.4168512509086939E-01 + 0.4164442247167356E-01 + 0.4160375515591128E-01 + 0.4156312311846519E-01 + 0.4152252633452742E-01 + 0.4148196477893443E-01 + 0.4144143842500240E-01 + 0.4140094724564166E-01 + 0.4136049121417478E-01 + 0.4132007030585704E-01 + 0.4127968449650911E-01 + 0.4123933376158041E-01 + 0.4119901807461015E-01 + 0.4115873740852534E-01 + 0.4111849173650764E-01 + 0.4107828103317816E-01 + 0.4103810527366285E-01 + 0.4099796443292200E-01 + 0.4095785848488406E-01 + 0.4091778740308217E-01 + 0.4087775116123749E-01 + 0.4083774973436221E-01 + 0.4079778309800825E-01 + 0.4075785122754764E-01 + 0.4071795409698125E-01 + 0.4067809167968532E-01 + 0.4063826394920995E-01 + 0.4059847088058114E-01 + 0.4055871244955760E-01 + 0.4051898863170193E-01 + 0.4047929940071893E-01 + 0.4043964472930982E-01 + 0.4040002459036403E-01 + 0.4036043895879957E-01 + 0.4032088781072565E-01 + 0.4028137112216374E-01 + 0.4024188886796162E-01 + 0.4020244102221867E-01 + 0.4016302755904005E-01 + 0.4012364845275712E-01 + 0.4008430367785801E-01 + 0.4004499320884975E-01 + 0.4000571702046899E-01 + 0.3996647508762451E-01 + 0.3992726738523142E-01 + 0.3988809388823862E-01 + 0.3984895457162261E-01 + 0.3980984941034198E-01 + 0.3977077837900982E-01 + 0.3973174145193504E-01 + 0.3969273860342748E-01 + 0.3965376980804006E-01 + 0.3961483504055736E-01 + 0.3957593427578975E-01 + 0.3953706748894908E-01 + 0.3949823465566251E-01 + 0.3945943575154854E-01 + 0.3942067075143578E-01 + 0.3938193962926790E-01 + 0.3934324235896547E-01 + 0.3930457891524061E-01 + 0.3926594927376659E-01 + 0.3922735341026131E-01 + 0.3918879129991757E-01 + 0.3915026291723703E-01 + 0.3911176823668327E-01 + 0.3907330723315647E-01 + 0.3903487988217982E-01 + 0.3899648615931777E-01 + 0.3895812603975180E-01 + 0.3891979949807057E-01 + 0.3888150650881568E-01 + 0.3884324704683045E-01 + 0.3880502108746503E-01 + 0.3876682860611745E-01 + 0.3872866957810115E-01 + 0.3869054397857559E-01 + 0.3865245178268406E-01 + 0.3861439296562015E-01 + 0.3857636750267726E-01 + 0.3853837536915986E-01 + 0.3850041654025864E-01 + 0.3846249099091810E-01 + 0.3842459869605182E-01 + 0.3838673963095437E-01 + 0.3834891377181775E-01 + 0.3831112109496182E-01 + 0.3827336157593076E-01 + 0.3823563518827441E-01 + 0.3819794190522712E-01 + 0.3816028170106418E-01 + 0.3812265455298585E-01 + 0.3808506043870222E-01 + 0.3804749933505640E-01 + 0.3800997121622557E-01 + 0.3797247605587656E-01 + 0.3793501382828226E-01 + 0.3789758450975715E-01 + 0.3786018807704461E-01 + 0.3782282450656377E-01 + 0.3778549377353663E-01 + 0.3774819585290946E-01 + 0.3771093071959561E-01 + 0.3767369834837624E-01 + 0.3763649871399886E-01 + 0.3759933179160011E-01 + 0.3756219755804119E-01 + 0.3752509599066156E-01 + 0.3748802706629617E-01 + 0.3745099075932707E-01 + 0.3741398704339145E-01 + 0.3737701589256959E-01 + 0.3734007728330743E-01 + 0.3730317119283716E-01 + 0.3726629759816272E-01 + 0.3722945647494649E-01 + 0.3719264779836357E-01 + 0.3715587154362081E-01 + 0.3711912768613587E-01 + 0.3708241620140979E-01 + 0.3704573706501095E-01 + 0.3700909025298391E-01 + 0.3697247574157934E-01 + 0.3693589350695552E-01 + 0.3689934352453889E-01 + 0.3686282576941071E-01 + 0.3682634021677607E-01 + 0.3678988684293228E-01 + 0.3675346562473761E-01 + 0.3671707653895201E-01 + 0.3668071956134584E-01 + 0.3664439466713651E-01 + 0.3660810183156347E-01 + 0.3657184103016515E-01 + 0.3653561223866160E-01 + 0.3649941543285933E-01 + 0.3646325058956984E-01 + 0.3642711768626658E-01 + 0.3639101670030031E-01 + 0.3635494760722061E-01 + 0.3631891038128984E-01 + 0.3628290499683570E-01 + 0.3624693142959231E-01 + 0.3621098965638389E-01 + 0.3617507965403997E-01 + 0.3613920139899780E-01 + 0.3610335486736478E-01 + 0.3606754003524867E-01 + 0.3603175687895908E-01 + 0.3599600537498990E-01 + 0.3596028549982310E-01 + 0.3592459722952682E-01 + 0.3588894053976131E-01 + 0.3585331540618497E-01 + 0.3581772180486009E-01 + 0.3578215971228017E-01 + 0.3574662910495283E-01 + 0.3571112995917561E-01 + 0.3567566225100324E-01 + 0.3564022595648893E-01 + 0.3560482105211865E-01 + 0.3556944751492091E-01 + 0.3553410532194507E-01 + 0.3549879444965223E-01 + 0.3546351487370433E-01 + 0.3542826656970968E-01 + 0.3539304951346812E-01 + 0.3535786368106193E-01 + 0.3532270904860501E-01 + 0.3528758559279571E-01 + 0.3525249329126767E-01 + 0.3521743212172757E-01 + 0.3518240206097931E-01 + 0.3514740308425751E-01 + 0.3511243516664720E-01 + 0.3507749828403146E-01 + 0.3504259241380101E-01 + 0.3500771753351234E-01 + 0.3497287362047596E-01 + 0.3493806065149657E-01 + 0.3490327860331494E-01 + 0.3486852745228468E-01 + 0.3483380717389280E-01 + 0.3479911774351007E-01 + 0.3476445913703174E-01 + 0.3472983133163319E-01 + 0.3469523430468145E-01 + 0.3466066803350654E-01 + 0.3462613249534000E-01 + 0.3459162766739685E-01 + 0.3455715352657904E-01 + 0.3452271004887650E-01 + 0.3448829721011388E-01 + 0.3445391498640707E-01 + 0.3441956335479967E-01 + 0.3438524229251985E-01 + 0.3435095177681228E-01 + 0.3431669178498014E-01 + 0.3428246229433908E-01 + 0.3424826328189959E-01 + 0.3421409472350297E-01 + 0.3417995659471102E-01 + 0.3414584887150107E-01 + 0.3411177153159501E-01 + 0.3407772455317210E-01 + 0.3404370791408689E-01 + 0.3400972159069838E-01 + 0.3397576555893602E-01 + 0.3394183979500032E-01 + 0.3390794427646092E-01 + 0.3387407898131855E-01 + 0.3384024388736995E-01 + 0.3380643897128079E-01 + 0.3377266420932678E-01 + 0.3373891957783876E-01 + 0.3370520505348436E-01 + 0.3367152061305839E-01 + 0.3363786623352788E-01 + 0.3360424189301461E-01 + 0.3357064757011482E-01 + 0.3353708324313451E-01 + 0.3350354888822285E-01 + 0.3347004448056218E-01 + 0.3343656999557731E-01 + 0.3340312541070990E-01 + 0.3336971070438671E-01 + 0.3333632585497514E-01 + 0.3330297084024723E-01 + 0.3326964563765867E-01 + 0.3323635022457416E-01 + 0.3320308457747440E-01 + 0.3316984867232963E-01 + 0.3313664248523971E-01 + 0.3310346599382502E-01 + 0.3307031917665954E-01 + 0.3303720201221741E-01 + 0.3300411447753848E-01 + 0.3297105654868642E-01 + 0.3293802820183226E-01 + 0.3290502941492062E-01 + 0.3287206016720543E-01 + 0.3283912043783944E-01 + 0.3280621020388133E-01 + 0.3277332944071421E-01 + 0.3274047812378585E-01 + 0.3270765623055935E-01 + 0.3267486374024528E-01 + 0.3264210063203664E-01 + 0.3260936688356542E-01 + 0.3257666247099727E-01 + 0.3254398737048561E-01 + 0.3251134155924817E-01 + 0.3247872501558579E-01 + 0.3244613771782333E-01 + 0.3241357964360604E-01 + 0.3238105076982965E-01 + 0.3234855107337248E-01 + 0.3231608053179789E-01 + 0.3228363912348824E-01 + 0.3225122682686853E-01 + 0.3221884362016050E-01 + 0.3218648948132222E-01 + 0.3215416438827935E-01 + 0.3212186831825827E-01 + 0.3208960124750357E-01 + 0.3205736315220747E-01 + 0.3202515400978281E-01 + 0.3199297379950173E-01 + 0.3196082250077967E-01 + 0.3192870009209737E-01 + 0.3189660655038996E-01 + 0.3186454185245045E-01 + 0.3183250597534891E-01 + 0.3180049889665304E-01 + 0.3176852059398630E-01 + 0.3173657104543488E-01 + 0.3170465022998893E-01 + 0.3167275812673930E-01 + 0.3164089471406607E-01 + 0.3160905996883833E-01 + 0.3157725386773327E-01 + 0.3154547638790408E-01 + 0.3151372750760658E-01 + 0.3148200720525234E-01 + 0.3145031545919821E-01 + 0.3141865224766265E-01 + 0.3138701754884226E-01 + 0.3135541134072658E-01 + 0.3132383360073352E-01 + 0.3129228430618332E-01 + 0.3126076343473763E-01 + 0.3122927096508934E-01 + 0.3119780687612519E-01 + 0.3116637114651568E-01 + 0.3113496375421566E-01 + 0.3110358467703247E-01 + 0.3107223389288272E-01 + 0.3104091138008013E-01 + 0.3100961711702810E-01 + 0.3097835108191102E-01 + 0.3094711325204305E-01 + 0.3091590360452226E-01 + 0.3088472211682444E-01 + 0.3085356876806982E-01 + 0.3082244353782624E-01 + 0.3079134640536886E-01 + 0.3076027734857524E-01 + 0.3072923634490619E-01 + 0.3069822337202965E-01 + 0.3066723840869929E-01 + 0.3063628143402335E-01 + 0.3060535242684605E-01 + 0.3057445136449134E-01 + 0.3054357822374010E-01 + 0.3051273298171475E-01 + 0.3048191561770283E-01 + 0.3045112611183687E-01 + 0.3042036444402593E-01 + 0.3038963059260877E-01 + 0.3035892453525548E-01 + 0.3032824624963752E-01 + 0.3029759571345546E-01 + 0.3026697290442324E-01 + 0.3023637780041993E-01 + 0.3020581038072673E-01 + 0.3017527062533358E-01 + 0.3014475851406296E-01 + 0.3011427402510912E-01 + 0.3008381713577160E-01 + 0.3005338782345698E-01 + 0.3002298606679055E-01 + 0.2999261184512529E-01 + 0.2996226513776143E-01 + 0.2993194592326920E-01 + 0.2990165417974568E-01 + 0.2987138988531681E-01 + 0.2984115301859148E-01 + 0.2981094355851824E-01 + 0.2978076148405131E-01 + 0.2975060677412492E-01 + 0.2972047940765798E-01 + 0.2969037936354653E-01 + 0.2966030662031076E-01 + 0.2963026115616035E-01 + 0.2960024294931568E-01 + 0.2957025197837816E-01 + 0.2954028822229055E-01 + 0.2951035166000441E-01 + 0.2948044227040115E-01 + 0.2945056003229414E-01 + 0.2942070492449068E-01 + 0.2939087692571507E-01 + 0.2936107601460441E-01 + 0.2933130216980460E-01 + 0.2930155537034411E-01 + 0.2927183559568696E-01 + 0.2924214282530750E-01 + 0.2921247703821577E-01 + 0.2918283821284888E-01 + 0.2915322632762152E-01 + 0.2912364136149182E-01 + 0.2909408329414458E-01 + 0.2906455210529946E-01 + 0.2903504777386567E-01 + 0.2900557027757680E-01 + 0.2897611959409007E-01 + 0.2894669570206423E-01 + 0.2891729858173464E-01 + 0.2888792821346490E-01 + 0.2885858457679842E-01 + 0.2882926764987663E-01 + 0.2879997741071112E-01 + 0.2877071383810701E-01 + 0.2874147691234406E-01 + 0.2871226661385577E-01 + 0.2868308292213939E-01 + 0.2865392581479918E-01 + 0.2862479526921611E-01 + 0.2859569126372925E-01 + 0.2856661377878771E-01 + 0.2853756279512001E-01 + 0.2850853829299420E-01 + 0.2847954025157232E-01 + 0.2845056864985373E-01 + 0.2842162346665406E-01 + 0.2839270468030778E-01 + 0.2836381226907215E-01 + 0.2833494621178687E-01 + 0.2830610648895924E-01 + 0.2827729308139281E-01 + 0.2824850596926316E-01 + 0.2821974513077865E-01 + 0.2819101054376367E-01 + 0.2816230218660498E-01 + 0.2813362003961826E-01 + 0.2810496408353242E-01 + 0.2807633429869129E-01 + 0.2804773066399129E-01 + 0.2801915315798891E-01 + 0.2799060175947897E-01 + 0.2796207644823926E-01 + 0.2793357720430063E-01 + 0.2790510400746294E-01 + 0.2787665683648192E-01 + 0.2784823566981846E-01 + 0.2781984048628719E-01 + 0.2779147126645659E-01 + 0.2776312799143764E-01 + 0.2773481064203193E-01 + 0.2770651919735648E-01 + 0.2767825363595803E-01 + 0.2765001393650707E-01 + 0.2762180007841741E-01 + 0.2759361204137774E-01 + 0.2756544980509175E-01 + 0.2753731334935865E-01 + 0.2750920265401626E-01 + 0.2748111769893897E-01 + 0.2745305846426522E-01 + 0.2742502493024991E-01 + 0.2739701707700706E-01 + 0.2736903488352010E-01 + 0.2734107832822934E-01 + 0.2731314738974695E-01 + 0.2728524204823706E-01 + 0.2725736228467510E-01 + 0.2722950807992835E-01 + 0.2720167941373242E-01 + 0.2717387626517982E-01 + 0.2714609861339465E-01 + 0.2711834643792762E-01 + 0.2709061971859280E-01 + 0.2706291843526004E-01 + 0.2703524256843508E-01 + 0.2700759209904968E-01 + 0.2697996700792050E-01 + 0.2695236727417687E-01 + 0.2692479287572192E-01 + 0.2689724379059211E-01 + 0.2686971999931515E-01 + 0.2684222148438161E-01 + 0.2681474822819323E-01 + 0.2678730021065900E-01 + 0.2675987740955983E-01 + 0.2673247980270442E-01 + 0.2670510736983179E-01 + 0.2667776009246647E-01 + 0.2665043795215734E-01 + 0.2662314092946539E-01 + 0.2659586900396179E-01 + 0.2656862215517567E-01 + 0.2654140036266583E-01 + 0.2651420360602339E-01 + 0.2648703186486624E-01 + 0.2645988511960558E-01 + 0.2643276335158545E-01 + 0.2640566654216996E-01 + 0.2637859467147619E-01 + 0.2635154771803178E-01 + 0.2632452566029339E-01 + 0.2629752847816293E-01 + 0.2627055615353986E-01 + 0.2624360866844992E-01 + 0.2621668600382435E-01 + 0.2618978813895328E-01 + 0.2616291505299975E-01 + 0.2613606672565481E-01 + 0.2610924313746891E-01 + 0.2608244426906808E-01 + 0.2605567010079113E-01 + 0.2602892061246912E-01 + 0.2600219578388647E-01 + 0.2597549559543949E-01 + 0.2594882002870055E-01 + 0.2592216906537070E-01 + 0.2589554268639364E-01 + 0.2586894087112839E-01 + 0.2584236359873736E-01 + 0.2581581084887996E-01 + 0.2578928260234898E-01 + 0.2576277884009407E-01 + 0.2573629954298671E-01 + 0.2570984469170423E-01 + 0.2568341426689400E-01 + 0.2565700824906431E-01 + 0.2563062661834532E-01 + 0.2560426935480387E-01 + 0.2557793643861083E-01 + 0.2555162785024647E-01 + 0.2552534357024809E-01 + 0.2549908357932713E-01 + 0.2547284785876024E-01 + 0.2544663638993865E-01 + 0.2542044915393001E-01 + 0.2539428613065062E-01 + 0.2536814729976071E-01 + 0.2534203264122113E-01 + 0.2531594213616550E-01 + 0.2528987576601335E-01 + 0.2526383351202908E-01 + 0.2523781535481433E-01 + 0.2521182127479341E-01 + 0.2518585125239997E-01 + 0.2515990526811151E-01 + 0.2513398330241816E-01 + 0.2510808533590407E-01 + 0.2508221134963611E-01 + 0.2505636132483622E-01 + 0.2503053524262934E-01 + 0.2500473308359257E-01 + 0.2497895482811061E-01 + 0.2495320045661619E-01 + 0.2492746994984133E-01 + 0.2490176328863286E-01 + 0.2487608045394455E-01 + 0.2485042142745976E-01 + 0.2482478619116747E-01 + 0.2479917472681770E-01 + 0.2477358701435140E-01 + 0.2474802303288406E-01 + 0.2472248276181603E-01 + 0.2469696618295795E-01 + 0.2467147327931773E-01 + 0.2464600403364240E-01 + 0.2462055842618714E-01 + 0.2459513643586073E-01 + 0.2456973804178650E-01 + 0.2454436322542629E-01 + 0.2451901196961554E-01 + 0.2449368425705177E-01 + 0.2446838006865391E-01 + 0.2444309938420647E-01 + 0.2441784218355984E-01 + 0.2439260844764233E-01 + 0.2436739815812857E-01 + 0.2434221129669680E-01 + 0.2431704784486462E-01 + 0.2429190778402879E-01 + 0.2426679109555933E-01 + 0.2424169776043582E-01 + 0.2421662775932055E-01 + 0.2419158107289677E-01 + 0.2416655768240931E-01 + 0.2414155756959783E-01 + 0.2411658071618399E-01 + 0.2409162710314524E-01 + 0.2406669671074816E-01 + 0.2404178951928512E-01 + 0.2401690551037403E-01 + 0.2399204466700474E-01 + 0.2396720697217851E-01 + 0.2394239240741846E-01 + 0.2391760095259037E-01 + 0.2389283258749368E-01 + 0.2386808729264560E-01 + 0.2384336504943544E-01 + 0.2381866583931456E-01 + 0.2379398964411716E-01 + 0.2376933644618148E-01 + 0.2374470622787146E-01 + 0.2372009897113040E-01 + 0.2369551465730094E-01 + 0.2367095326767374E-01 + 0.2364641478319238E-01 + 0.2362189918426237E-01 + 0.2359740645125545E-01 + 0.2357293656547771E-01 + 0.2354848950980711E-01 + 0.2352406526726132E-01 + 0.2349966381977863E-01 + 0.2347528514732415E-01 + 0.2345092922966194E-01 + 0.2342659604778183E-01 + 0.2340228558511062E-01 + 0.2337799782535705E-01 + 0.2335373275108739E-01 + 0.2332949034239477E-01 + 0.2330527057905222E-01 + 0.2328107344169633E-01 + 0.2325689891300137E-01 + 0.2323274697593406E-01 + 0.2320861761286368E-01 + 0.2318451080462125E-01 + 0.2316042653179407E-01 + 0.2313636477543780E-01 + 0.2311232551792527E-01 + 0.2308830874185919E-01 + 0.2306431442954818E-01 + 0.2304034256239651E-01 + 0.2301639312163515E-01 + 0.2299246608875424E-01 + 0.2296856144611709E-01 + 0.2294467917627081E-01 + 0.2292081926144904E-01 + 0.2289698168272841E-01 + 0.2287316642091859E-01 + 0.2284937345704708E-01 + 0.2282560277302312E-01 + 0.2280185435097905E-01 + 0.2277812817316079E-01 + 0.2275442422231841E-01 + 0.2273074248134178E-01 + 0.2270708293282165E-01 + 0.2268344555789296E-01 + 0.2265983033724827E-01 + 0.2263623725177292E-01 + 0.2261266628338224E-01 + 0.2258911741433435E-01 + 0.2256559062691465E-01 + 0.2254208590356836E-01 + 0.2251860322679858E-01 + 0.2249514257906968E-01 + 0.2247170394259467E-01 + 0.2244828729948675E-01 + 0.2242489263178399E-01 + 0.2240151992099190E-01 + 0.2237816914838528E-01 + 0.2235484029536451E-01 + 0.2233153334432296E-01 + 0.2230824827812282E-01 + 0.2228498507954349E-01 + 0.2226174373062068E-01 + 0.2223852421300793E-01 + 0.2221532650842478E-01 + 0.2219215059925708E-01 + 0.2216899646826318E-01 + 0.2214586409814664E-01 + 0.2212275347098018E-01 + 0.2209966456845347E-01 + 0.2207659737230053E-01 + 0.2205355186485113E-01 + 0.2203052802882766E-01 + 0.2200752584692042E-01 + 0.2198454530129515E-01 + 0.2196158637374270E-01 + 0.2193864904606647E-01 + 0.2191573330038489E-01 + 0.2189283911906041E-01 + 0.2186996648448496E-01 + 0.2184711537944367E-01 + 0.2182428578705238E-01 + 0.2180147769039973E-01 + 0.2177869107184269E-01 + 0.2175592591307209E-01 + 0.2173318219577090E-01 + 0.2171045990199390E-01 + 0.2168775901416232E-01 + 0.2166507951472256E-01 + 0.2164242138636799E-01 + 0.2161978461205623E-01 + 0.2159716917474675E-01 + 0.2157457505706688E-01 + 0.2155200224125906E-01 + 0.2152945070954802E-01 + 0.2150692044428905E-01 + 0.2148441142800142E-01 + 0.2146192364321023E-01 + 0.2143945707224509E-01 + 0.2141701169716972E-01 + 0.2139458750004069E-01 + 0.2137218446353881E-01 + 0.2134980257126586E-01 + 0.2132744180688811E-01 + 0.2130510215344559E-01 + 0.2128278359297559E-01 + 0.2126048610742916E-01 + 0.2123820967909004E-01 + 0.2121595429082013E-01 + 0.2119371992553933E-01 + 0.2117150656616522E-01 + 0.2114931419561145E-01 + 0.2112714279678919E-01 + 0.2110499235232457E-01 + 0.2108286284425713E-01 + 0.2106075425455639E-01 + 0.2103866656565224E-01 + 0.2101659976100603E-01 + 0.2099455382421842E-01 + 0.2097252873855415E-01 + 0.2095052448645746E-01 + 0.2092854105025016E-01 + 0.2090657841257815E-01 + 0.2088463655695198E-01 + 0.2086271546702434E-01 + 0.2084081512602248E-01 + 0.2081893551593268E-01 + 0.2079707661851645E-01 + 0.2077523841593396E-01 + 0.2075342089161781E-01 + 0.2073162402925371E-01 + 0.2070984781224313E-01 + 0.2068809222299368E-01 + 0.2066635724369597E-01 + 0.2064464285687139E-01 + 0.2062294904630791E-01 + 0.2060127579609686E-01 + 0.2057962309004449E-01 + 0.2055799091075969E-01 + 0.2053637924053737E-01 + 0.2051478806181282E-01 + 0.2049321735766910E-01 + 0.2047166711137549E-01 + 0.2045013730620840E-01 + 0.2042862792547961E-01 + 0.2040713895251202E-01 + 0.2038567037048810E-01 + 0.2036422216181084E-01 + 0.2034279430861457E-01 + 0.2032138679330422E-01 + 0.2029999959993676E-01 + 0.2027863271319154E-01 + 0.2025728611750757E-01 + 0.2023595979570338E-01 + 0.2021465372993088E-01 + 0.2019336790243448E-01 + 0.2017210229615860E-01 + 0.2015085689436181E-01 + 0.2012963168032278E-01 + 0.2010842663747195E-01 + 0.2008724174931395E-01 + 0.2006607699935820E-01 + 0.2004493237115362E-01 + 0.2002380784826996E-01 + 0.2000270341424741E-01 + 0.1998161905232660E-01 + 0.1996055474557529E-01 + 0.1993951047704853E-01 + 0.1991848622968403E-01 + 0.1989748198634572E-01 + 0.1987649772995572E-01 + 0.1985553344417743E-01 + 0.1983458911317925E-01 + 0.1981366472111030E-01 + 0.1979276025171045E-01 + 0.1977187568841740E-01 + 0.1975101101464569E-01 + 0.1973016621355517E-01 + 0.1970934126810148E-01 + 0.1968853616124925E-01 + 0.1966775087622660E-01 + 0.1964698539649067E-01 + 0.1962623970551985E-01 + 0.1960551378707772E-01 + 0.1958480762519586E-01 + 0.1956412120390298E-01 + 0.1954345450691027E-01 + 0.1952280751760545E-01 + 0.1950218021936081E-01 + 0.1948157259552239E-01 + 0.1946098462940736E-01 + 0.1944041630434339E-01 + 0.1941986760404962E-01 + 0.1939933851271324E-01 + 0.1937882901453405E-01 + 0.1935833909313752E-01 + 0.1933786873140487E-01 + 0.1931741791218863E-01 + 0.1929698661931992E-01 + 0.1927657483800507E-01 + 0.1925618255352610E-01 + 0.1923580974958544E-01 + 0.1921545640747738E-01 + 0.1919512250832205E-01 + 0.1917480803528299E-01 + 0.1915451297490566E-01 + 0.1913423731403177E-01 + 0.1911398103752271E-01 + 0.1909374412667884E-01 + 0.1907352656244124E-01 + 0.1905332832732922E-01 + 0.1903314940694856E-01 + 0.1901298978725680E-01 + 0.1899284945320529E-01 + 0.1897272838760362E-01 + 0.1895262657298929E-01 + 0.1893254399250549E-01 + 0.1891248063070012E-01 + 0.1889243647231910E-01 + 0.1887241150182653E-01 + 0.1885240570297333E-01 + 0.1883241905939934E-01 + 0.1881245155475859E-01 + 0.1879250317274450E-01 + 0.1877257389705719E-01 + 0.1875266371158541E-01 + 0.1873277260078768E-01 + 0.1871290054922987E-01 + 0.1869304754120371E-01 + 0.1867321356009451E-01 + 0.1865339858910027E-01 + 0.1863360261186886E-01 + 0.1861382561367881E-01 + 0.1859406758017813E-01 + 0.1857432849632367E-01 + 0.1855460834432462E-01 + 0.1853490710570754E-01 + 0.1851522476282622E-01 + 0.1849556130163943E-01 + 0.1847591670908802E-01 + 0.1845629097147402E-01 + 0.1843668407204671E-01 + 0.1841709599314429E-01 + 0.1839752671738358E-01 + 0.1837797622884413E-01 + 0.1835844451208336E-01 + 0.1833893155166302E-01 + 0.1831943733216738E-01 + 0.1829996183818894E-01 + 0.1828050505429948E-01 + 0.1826106696493951E-01 + 0.1824164755449824E-01 + 0.1822224680723916E-01 + 0.1820286470654943E-01 + 0.1818350123544293E-01 + 0.1816415637722128E-01 + 0.1814483011741218E-01 + 0.1812552244257701E-01 + 0.1810623333897818E-01 + 0.1808696279028398E-01 + 0.1806771077885136E-01 + 0.1804847728718972E-01 + 0.1802926229934289E-01 + 0.1801006580019820E-01 + 0.1799088777467919E-01 + 0.1797172820799718E-01 + 0.1795258708553544E-01 + 0.1793346439256445E-01 + 0.1791436011300696E-01 + 0.1789527422991166E-01 + 0.1787620672641641E-01 + 0.1785715758702504E-01 + 0.1783812679720256E-01 + 0.1781911434239801E-01 + 0.1780012020752680E-01 + 0.1778114437709731E-01 + 0.1776218683558695E-01 + 0.1774324756712874E-01 + 0.1772432655557060E-01 + 0.1770542378479085E-01 + 0.1768653923940808E-01 + 0.1766767290470467E-01 + 0.1764882476596640E-01 + 0.1762999480804347E-01 + 0.1761118301536299E-01 + 0.1759238937233402E-01 + 0.1757361386334805E-01 + 0.1755485647277805E-01 + 0.1753611718501215E-01 + 0.1751739598490633E-01 + 0.1749869285785011E-01 + 0.1748000778923750E-01 + 0.1746134076361116E-01 + 0.1744269176446212E-01 + 0.1742406077524191E-01 + 0.1740544778046579E-01 + 0.1738685276607311E-01 + 0.1736827571808747E-01 + 0.1734971662176188E-01 + 0.1733117546123051E-01 + 0.1731265222054581E-01 + 0.1729414688414352E-01 + 0.1727565943706332E-01 + 0.1725718986439786E-01 + 0.1723873815122665E-01 + 0.1722030428260650E-01 + 0.1720188824358922E-01 + 0.1718349001893569E-01 + 0.1716510959286578E-01 + 0.1714674694954356E-01 + 0.1712840207357822E-01 + 0.1711007495047970E-01 + 0.1709176556586565E-01 + 0.1707347390517496E-01 + 0.1705519995345264E-01 + 0.1703694369569026E-01 + 0.1701870511658433E-01 + 0.1700048420012268E-01 + 0.1698228093019035E-01 + 0.1696409529139027E-01 + 0.1694592727020759E-01 + 0.1692777685343113E-01 + 0.1690964402692438E-01 + 0.1689152877389931E-01 + 0.1687343107709643E-01 + 0.1685535092024020E-01 + 0.1683728829013901E-01 + 0.1681924317420394E-01 + 0.1680121555909966E-01 + 0.1678320542892950E-01 + 0.1676521276724759E-01 + 0.1674723755798618E-01 + 0.1672927978650008E-01 + 0.1671133943847855E-01 + 0.1669341649955063E-01 + 0.1667551095509681E-01 + 0.1665762279043344E-01 + 0.1663975199078229E-01 + 0.1662189854093715E-01 + 0.1660406242557087E-01 + 0.1658624362946186E-01 + 0.1656844213791238E-01 + 0.1655065793638689E-01 + 0.1653289101030550E-01 + 0.1651514134484701E-01 + 0.1649740892510839E-01 + 0.1647969373626037E-01 + 0.1646199576391467E-01 + 0.1644431499384651E-01 + 0.1642665141181265E-01 + 0.1640900500344726E-01 + 0.1639137575433482E-01 + 0.1637376364987920E-01 + 0.1635616867417526E-01 + 0.1633859081074030E-01 + 0.1632103004341182E-01 + 0.1630348635861271E-01 + 0.1628595974400844E-01 + 0.1626845018701190E-01 + 0.1625095767272712E-01 + 0.1623348218505065E-01 + 0.1621602370801211E-01 + 0.1619858222705379E-01 + 0.1618115772842114E-01 + 0.1616375019829579E-01 + 0.1614635962205802E-01 + 0.1612898598459329E-01 + 0.1611162927082516E-01 + 0.1609428946623396E-01 + 0.1607696655667318E-01 + 0.1605966052798727E-01 + 0.1604237136580219E-01 + 0.1602509905558503E-01 + 0.1600784358282019E-01 + 0.1599060493331483E-01 + 0.1597338309313070E-01 + 0.1595617804827711E-01 + 0.1593898978371953E-01 + 0.1592181828353159E-01 + 0.1590466353183698E-01 + 0.1588752551434061E-01 + 0.1587040421821107E-01 + 0.1585329963062918E-01 + 0.1583621173778550E-01 + 0.1581914052487761E-01 + 0.1580208597707313E-01 + 0.1578504807990178E-01 + 0.1576802681928651E-01 + 0.1575102218115503E-01 + 0.1573403415095826E-01 + 0.1571706271358630E-01 + 0.1570010785391269E-01 + 0.1568316955739603E-01 + 0.1566624781024106E-01 + 0.1564934259869942E-01 + 0.1563245390894861E-01 + 0.1561558172706364E-01 + 0.1559872603910752E-01 + 0.1558188683089632E-01 + 0.1556506408787586E-01 + 0.1554825779546472E-01 + 0.1553146793931039E-01 + 0.1551469450543302E-01 + 0.1549793747988807E-01 + 0.1548119684881566E-01 + 0.1546447259850594E-01 + 0.1544776471525987E-01 + 0.1543107318485690E-01 + 0.1541439799207308E-01 + 0.1539773912157429E-01 + 0.1538109655862454E-01 + 0.1536447028974008E-01 + 0.1534786030159452E-01 + 0.1533126658087925E-01 + 0.1531468911432621E-01 + 0.1529812788867144E-01 + 0.1528158289006508E-01 + 0.1526505410319994E-01 + 0.1524854151254700E-01 + 0.1523204510318561E-01 + 0.1521556486184778E-01 + 0.1519910077554321E-01 + 0.1518265283096619E-01 + 0.1516622101387386E-01 + 0.1514980530985024E-01 + 0.1513340570468478E-01 + 0.1511702218483464E-01 + 0.1510065473689233E-01 + 0.1508430334736578E-01 + 0.1506796800246178E-01 + 0.1505164868832018E-01 + 0.1503534539084971E-01 + 0.1501905809505720E-01 + 0.1500278678572940E-01 + 0.1498653144823048E-01 + 0.1497029207039560E-01 + 0.1495406864072088E-01 + 0.1493786114701468E-01 + 0.1492166957385690E-01 + 0.1490549390488112E-01 + 0.1488933412435685E-01 + 0.1487319021982974E-01 + 0.1485706217989714E-01 + 0.1484094999266885E-01 + 0.1482485364349518E-01 + 0.1480877311675738E-01 + 0.1479270839717745E-01 + 0.1477665947160274E-01 + 0.1476062632769626E-01 + 0.1474460895289377E-01 + 0.1472860733306427E-01 + 0.1471262145342048E-01 + 0.1469665129935779E-01 + 0.1468069685766743E-01 + 0.1466475811577784E-01 + 0.1464883506096403E-01 + 0.1463292767919287E-01 + 0.1461703595578109E-01 + 0.1460115987616788E-01 + 0.1458529942696951E-01 + 0.1456945459543874E-01 + 0.1455362536875658E-01 + 0.1453781173330180E-01 + 0.1452201367498164E-01 + 0.1450623117976416E-01 + 0.1449046423438285E-01 + 0.1447471282605971E-01 + 0.1445897694194598E-01 + 0.1444325656818330E-01 + 0.1442755169021396E-01 + 0.1441186229352541E-01 + 0.1439618836445717E-01 + 0.1438052988998904E-01 + 0.1436488685711121E-01 + 0.1434925925273219E-01 + 0.1433364706369377E-01 + 0.1431805027680997E-01 + 0.1430246887841397E-01 + 0.1428690285441474E-01 + 0.1427135219074780E-01 + 0.1425581687422166E-01 + 0.1424029689247927E-01 + 0.1422479223316102E-01 + 0.1420930288302633E-01 + 0.1419382882792237E-01 + 0.1417837005367606E-01 + 0.1416292654674280E-01 + 0.1414749829428302E-01 + 0.1413208528347481E-01 + 0.1411668750082995E-01 + 0.1410130493205036E-01 + 0.1408593756281610E-01 + 0.1407058537988867E-01 + 0.1405524837145454E-01 + 0.1403992652577731E-01 + 0.1402461983013914E-01 + 0.1400932827041972E-01 + 0.1399405183239693E-01 + 0.1397879050220043E-01 + 0.1396354426650556E-01 + 0.1394831311203848E-01 + 0.1393309702582853E-01 + 0.1391789599541520E-01 + 0.1390271000837947E-01 + 0.1388753905155754E-01 + 0.1387238311042335E-01 + 0.1385724217031442E-01 + 0.1384211621776334E-01 + 0.1382700524168005E-01 + 0.1381190923124870E-01 + 0.1379682817433092E-01 + 0.1378176205592358E-01 + 0.1376671086065236E-01 + 0.1375167457412427E-01 + 0.1373665318426368E-01 + 0.1372164667932849E-01 + 0.1370665504723684E-01 + 0.1369167827503112E-01 + 0.1367671634961462E-01 + 0.1366176925780451E-01 + 0.1364683698617592E-01 + 0.1363191952126171E-01 + 0.1361701684974083E-01 + 0.1360212895874175E-01 + 0.1358725583547918E-01 + 0.1357239746712816E-01 + 0.1355755384072989E-01 + 0.1354272494329734E-01 + 0.1352791076186601E-01 + 0.1351311128355477E-01 + 0.1349832649550178E-01 + 0.1348355638479593E-01 + 0.1346880093832703E-01 + 0.1345406014293437E-01 + 0.1343933398561764E-01 + 0.1342462245408852E-01 + 0.1340992553625625E-01 + 0.1339524321978189E-01 + 0.1338057549111697E-01 + 0.1336592233634534E-01 + 0.1335128374178714E-01 + 0.1333665969502649E-01 + 0.1332205018406811E-01 + 0.1330745519674526E-01 + 0.1329287471988198E-01 + 0.1327830873993503E-01 + 0.1326375724357173E-01 + 0.1324922021882335E-01 + 0.1323469765426339E-01 + 0.1322018953823367E-01 + 0.1320569585741652E-01 + 0.1319121659777465E-01 + 0.1317675174541679E-01 + 0.1316230128762193E-01 + 0.1314786521222197E-01 + 0.1313344350701158E-01 + 0.1311903615943304E-01 + 0.1310464315674752E-01 + 0.1309026448624114E-01 + 0.1307590013545579E-01 + 0.1306155009207644E-01 + 0.1304721434372784E-01 + 0.1303289287737261E-01 + 0.1301858567957097E-01 + 0.1300429273697008E-01 + 0.1299001403732565E-01 + 0.1297574956912471E-01 + 0.1296149932077080E-01 + 0.1294726327937219E-01 + 0.1293304143111019E-01 + 0.1291883376225594E-01 + 0.1290464026074447E-01 + 0.1289046091580205E-01 + 0.1287629571657995E-01 + 0.1286214465036485E-01 + 0.1284800770287538E-01 + 0.1283388485984905E-01 + 0.1281977610834632E-01 + 0.1280568143663305E-01 + 0.1279160083300837E-01 + 0.1277753428552838E-01 + 0.1276348178200931E-01 + 0.1274944331024608E-01 + 0.1273541885774452E-01 + 0.1272140841170125E-01 + 0.1270741195931009E-01 + 0.1269342948814008E-01 + 0.1267946098619514E-01 + 0.1266550644149626E-01 + 0.1265156584180774E-01 + 0.1263763917457154E-01 + 0.1262372642720385E-01 + 0.1260982758688893E-01 + 0.1259594264049533E-01 + 0.1258207157489007E-01 + 0.1256821437805297E-01 + 0.1255437103960671E-01 + 0.1254054154928078E-01 + 0.1252672589514137E-01 + 0.1251292406258944E-01 + 0.1249913603680530E-01 + 0.1248536180457123E-01 + 0.1247160135545758E-01 + 0.1245785467930429E-01 + 0.1244412176486379E-01 + 0.1243040259883122E-01 + 0.1241669716767761E-01 + 0.1240300545859085E-01 + 0.1238932746023455E-01 + 0.1237566316145179E-01 + 0.1236201255057259E-01 + 0.1234837561477655E-01 + 0.1233475234108717E-01 + 0.1232114271668515E-01 + 0.1230754672913539E-01 + 0.1229396436606108E-01 + 0.1228039561546967E-01 + 0.1226684046639417E-01 + 0.1225329890803650E-01 + 0.1223977092901220E-01 + 0.1222625651622609E-01 + 0.1221275565627271E-01 + 0.1219926833624071E-01 + 0.1218579454479601E-01 + 0.1217233427091868E-01 + 0.1215888750309015E-01 + 0.1214545422804763E-01 + 0.1213203443214723E-01 + 0.1211862810240552E-01 + 0.1210523522837153E-01 + 0.1209185580020093E-01 + 0.1207848980742276E-01 + 0.1206513723693192E-01 + 0.1205179807493138E-01 + 0.1203847230811274E-01 + 0.1202515992542013E-01 + 0.1201186091644622E-01 + 0.1199857527037345E-01 + 0.1198530297430897E-01 + 0.1197204401470559E-01 + 0.1195879837833518E-01 + 0.1194556605374268E-01 + 0.1193234703008471E-01 + 0.1191914129638964E-01 + 0.1190594884089953E-01 + 0.1189276965155991E-01 + 0.1187960371631469E-01 + 0.1186645102310072E-01 + 0.1185331155985199E-01 + 0.1184018531460948E-01 + 0.1182707227620610E-01 + 0.1181397243383023E-01 + 0.1180088577645562E-01 + 0.1178781229128573E-01 + 0.1177475196465846E-01 + 0.1176170478315442E-01 + 0.1174867073560639E-01 + 0.1173564981204534E-01 + 0.1172264200231509E-01 + 0.1170964729426473E-01 + 0.1169666567458989E-01 + 0.1168369713014079E-01 + 0.1167074164965867E-01 + 0.1165779922307241E-01 + 0.1164486984018393E-01 + 0.1163195348897132E-01 + 0.1161905015616968E-01 + 0.1160615982861494E-01 + 0.1159328249490083E-01 + 0.1158041814492048E-01 + 0.1156756676849266E-01 + 0.1155472835376801E-01 + 0.1154190288756043E-01 + 0.1152909035672866E-01 + 0.1151629074962203E-01 + 0.1150350405588441E-01 + 0.1149073026515418E-01 + 0.1147796936606835E-01 + 0.1146522134632162E-01 + 0.1145248619358995E-01 + 0.1143976389597330E-01 + 0.1142705444200402E-01 + 0.1141435782024385E-01 + 0.1140167401953201E-01 + 0.1138900302901392E-01 + 0.1137634483783512E-01 + 0.1136369943462925E-01 + 0.1135106680741737E-01 + 0.1133844694418217E-01 + 0.1132583983281699E-01 + 0.1131324546109931E-01 + 0.1130066381681611E-01 + 0.1128809488855855E-01 + 0.1127553866604868E-01 + 0.1126299513908392E-01 + 0.1125046429691245E-01 + 0.1123794612794443E-01 + 0.1122544062051710E-01 + 0.1121294776279842E-01 + 0.1120046754267569E-01 + 0.1118799994801430E-01 + 0.1117554496708863E-01 + 0.1116310258890929E-01 + 0.1115067280256348E-01 + 0.1113825559710186E-01 + 0.1112585096150357E-01 + 0.1111345888473821E-01 + 0.1110107935555245E-01 + 0.1108871236221811E-01 + 0.1107635789294718E-01 + 0.1106401593622562E-01 + 0.1105168648117530E-01 + 0.1103936951700744E-01 + 0.1102706503265629E-01 + 0.1101477301635459E-01 + 0.1100249345622606E-01 + 0.1099022634067679E-01 + 0.1097797165889399E-01 + 0.1096572940019861E-01 + 0.1095349955357487E-01 + 0.1094128210698861E-01 + 0.1092907704821397E-01 + 0.1091688436559249E-01 + 0.1090470404934503E-01 + 0.1089253609008091E-01 + 0.1088038047779905E-01 + 0.1086823720028299E-01 + 0.1085610624481395E-01 + 0.1084398759898407E-01 + 0.1083188125162264E-01 + 0.1081978719186644E-01 + 0.1080770540888534E-01 + 0.1079563589199347E-01 + 0.1078357863054428E-01 + 0.1077153361381262E-01 + 0.1075950083069753E-01 + 0.1074748026998577E-01 + 0.1073547192045092E-01 + 0.1072347577079708E-01 + 0.1071149180970569E-01 + 0.1069952002597008E-01 + 0.1068756040902863E-01 + 0.1067561294855046E-01 + 0.1066367763403278E-01 + 0.1065175445388138E-01 + 0.1063984339607552E-01 + 0.1062794444872708E-01 + 0.1061605760088075E-01 + 0.1060418284197900E-01 + 0.1059232016147706E-01 + 0.1058046954891752E-01 + 0.1056863099388349E-01 + 0.1055680448581241E-01 + 0.1054499001289815E-01 + 0.1053318756270547E-01 + 0.1052139712302642E-01 + 0.1050961868384558E-01 + 0.1049785223635396E-01 + 0.1048609777153511E-01 + 0.1047435527806281E-01 + 0.1046262474322987E-01 + 0.1045090615447926E-01 + 0.1043919950123151E-01 + 0.1042750477419090E-01 + 0.1041582196393867E-01 + 0.1040415105915571E-01 + 0.1039249204718460E-01 + 0.1038084491547625E-01 + 0.1036920965349561E-01 + 0.1035758625224573E-01 + 0.1034597470267863E-01 + 0.1033437499424248E-01 + 0.1032278711514067E-01 + 0.1031121105357383E-01 + 0.1029964679840402E-01 + 0.1028809433908659E-01 + 0.1027655366509317E-01 + 0.1026502476579322E-01 + 0.1025350763045684E-01 + 0.1024200224834142E-01 + 0.1023050860848530E-01 + 0.1021902669969638E-01 + 0.1020755651080320E-01 + 0.1019609803156735E-01 + 0.1018465125281443E-01 + 0.1017321616538430E-01 + 0.1016179275859330E-01 + 0.1015038101987491E-01 + 0.1013898093658075E-01 + 0.1012759249751044E-01 + 0.1011621569340363E-01 + 0.1010485051512003E-01 + 0.1009349695272873E-01 + 0.1008215499514998E-01 + 0.1007082463121557E-01 + 0.1005950584987157E-01 + 0.1004819864024441E-01 + 0.1003690299147980E-01 + 0.1002561889299867E-01 + 0.1001434633469299E-01 + 0.1000308530649883E-01 + 0.9991835798126378E-02 + 0.9980597798865698E-02 + 0.9969371297961537E-02 + 0.9958156284736720E-02 + 0.9946952748672121E-02 + 0.9935760679267894E-02 + 0.9924580066053267E-02 + 0.9913410898621622E-02 + 0.9902253166574791E-02 + 0.9891106859452625E-02 + 0.9879971966646350E-02 + 0.9868848477525456E-02 + 0.9857736381557622E-02 + 0.9846635668467975E-02 + 0.9835546328023291E-02 + 0.9824468349926468E-02 + 0.9813401723697229E-02 + 0.9802346438822674E-02 + 0.9791302484805621E-02 + 0.9780269851198424E-02 + 0.9769248527563132E-02 + 0.9758238503499571E-02 + 0.9747239768737424E-02 + 0.9736252313034221E-02 + 0.9725276126110327E-02 + 0.9714311197545820E-02 + 0.9703357516887808E-02 + 0.9692415073718156E-02 + 0.9681483857762135E-02 + 0.9670563858782046E-02 + 0.9659655066539617E-02 + 0.9648757470794202E-02 + 0.9637871061304399E-02 + 0.9626995827802096E-02 + 0.9616131759886535E-02 + 0.9605278847115894E-02 + 0.9594437079093437E-02 + 0.9583606445668334E-02 + 0.9572786936773172E-02 + 0.9561978542316766E-02 + 0.9551181252064945E-02 + 0.9540395055730546E-02 + 0.9529619943033524E-02 + 0.9518855903741372E-02 + 0.9508102927640769E-02 + 0.9497361004530626E-02 + 0.9486630124298030E-02 + 0.9475910276869113E-02 + 0.9465201452154528E-02 + 0.9454503639940047E-02 + 0.9443816829951318E-02 + 0.9433141011929688E-02 + 0.9422476175758641E-02 + 0.9411822311396023E-02 + 0.9401179408795265E-02 + 0.9390547457858791E-02 + 0.9379926448460147E-02 + 0.9369316370478240E-02 + 0.9358717213854950E-02 + 0.9348128968570979E-02 + 0.9337551624601549E-02 + 0.9326985171847330E-02 + 0.9316429600159054E-02 + 0.9305884899394584E-02 + 0.9295351059523213E-02 + 0.9284828070595317E-02 + 0.9274315922662051E-02 + 0.9263814605757672E-02 + 0.9253324109903122E-02 + 0.9242844425116772E-02 + 0.9232375541377834E-02 + 0.9221917448632073E-02 + 0.9211470136827115E-02 + 0.9201033595970134E-02 + 0.9190607816123452E-02 + 0.9180192787352013E-02 + 0.9169788499734260E-02 + 0.9159394943362182E-02 + 0.9149012108328044E-02 + 0.9138639984716363E-02 + 0.9128278562603292E-02 + 0.9117927832065140E-02 + 0.9107587783195349E-02 + 0.9097258406107574E-02 + 0.9086939690917472E-02 + 0.9076631627772587E-02 + 0.9066334206861136E-02 + 0.9056047418372838E-02 + 0.9045771252446484E-02 + 0.9035505699150447E-02 + 0.9025250748549393E-02 + 0.9015006390790925E-02 + 0.9004772616147051E-02 + 0.8994549414899556E-02 + 0.8984336777293635E-02 + 0.8974134693514955E-02 + 0.8963943153743575E-02 + 0.8953762148150759E-02 + 0.8943591666892017E-02 + 0.8933431700121835E-02 + 0.8923282238060411E-02 + 0.8913143271054457E-02 + 0.8903014789464764E-02 + 0.8892896783605824E-02 + 0.8882789243695189E-02 + 0.8872692159938390E-02 + 0.8862605522596601E-02 + 0.8852529322057825E-02 + 0.8842463548727601E-02 + 0.8832408192956015E-02 + 0.8822363244955403E-02 + 0.8812328694917051E-02 + 0.8802304533086478E-02 + 0.8792290749856340E-02 + 0.8782287335644085E-02 + 0.8772294280857473E-02 + 0.8762311575875419E-02 + 0.8752339211071501E-02 + 0.8742377176808951E-02 + 0.8732425463417492E-02 + 0.8722484061220071E-02 + 0.8712552960585612E-02 + 0.8702632152046995E-02 + 0.8692721626173652E-02 + 0.8682821373485739E-02 + 0.8672931384310953E-02 + 0.8663051648929995E-02 + 0.8653182157664324E-02 + 0.8643322901009622E-02 + 0.8633473869508295E-02 + 0.8623635053686982E-02 + 0.8613806443998403E-02 + 0.8603988030873541E-02 + 0.8594179804766933E-02 + 0.8584381756254478E-02 + 0.8574593875951097E-02 + 0.8564816154449373E-02 + 0.8555048582215479E-02 + 0.8545291149671202E-02 + 0.8535543847254704E-02 + 0.8525806665506137E-02 + 0.8516079595004820E-02 + 0.8506362626329540E-02 + 0.8496655750055059E-02 + 0.8486958956754348E-02 + 0.8477272237007359E-02 + 0.8467595581446510E-02 + 0.8457928980728248E-02 + 0.8448272425500820E-02 + 0.8438625906343194E-02 + 0.8428989413799890E-02 + 0.8419362938424941E-02 + 0.8409746470863137E-02 + 0.8400140001808353E-02 + 0.8390543521951731E-02 + 0.8380957021950575E-02 + 0.8371380492442439E-02 + 0.8361813924068505E-02 + 0.8352257307515075E-02 + 0.8342710633497216E-02 + 0.8333173892728699E-02 + 0.8323647075900645E-02 + 0.8314130173688506E-02 + 0.8304623176770544E-02 + 0.8295126075870353E-02 + 0.8285638861745619E-02 + 0.8276161525152384E-02 + 0.8266694056805786E-02 + 0.8257236447387630E-02 + 0.8247788687585050E-02 + 0.8238350768200618E-02 + 0.8228922680138975E-02 + 0.8219504414303982E-02 + 0.8210095961509031E-02 + 0.8200697312480907E-02 + 0.8191308457944476E-02 + 0.8181929388662670E-02 + 0.8172560095437870E-02 + 0.8163200569075471E-02 + 0.8153850800415539E-02 + 0.8144510780337125E-02 + 0.8135180499721916E-02 + 0.8125859949469877E-02 + 0.8116549120503253E-02 + 0.8107248003743090E-02 + 0.8097956590009067E-02 + 0.8088674869987084E-02 + 0.8079402834358039E-02 + 0.8070140474003441E-02 + 0.8060887780091743E-02 + 0.8051644743810245E-02 + 0.8042411356155721E-02 + 0.8033187607829360E-02 + 0.8023973489509000E-02 + 0.8014768992036057E-02 + 0.8005574106527474E-02 + 0.7996388824125766E-02 + 0.7987213135881735E-02 + 0.7978047032678313E-02 + 0.7968890505380997E-02 + 0.7959743544921746E-02 + 0.7950606142364785E-02 + 0.7941478288789758E-02 + 0.7932359975232926E-02 + 0.7923251192636482E-02 + 0.7914151931930445E-02 + 0.7905062184090616E-02 + 0.7895981940200869E-02 + 0.7886911191360708E-02 + 0.7877849928645132E-02 + 0.7868798143066227E-02 + 0.7859755825626093E-02 + 0.7850722967377961E-02 + 0.7841699559518855E-02 + 0.7832685593270910E-02 + 0.7823681059781019E-02 + 0.7814685949963915E-02 + 0.7805700254689818E-02 + 0.7796723964935337E-02 + 0.7787757072036301E-02 + 0.7778799567404170E-02 + 0.7769851442356794E-02 + 0.7760912687865740E-02 + 0.7751983294822617E-02 + 0.7743063254194728E-02 + 0.7734152557256456E-02 + 0.7725251195359951E-02 + 0.7716359159820784E-02 + 0.7707476441791579E-02 + 0.7698603032379787E-02 + 0.7689738922704680E-02 + 0.7680884103943376E-02 + 0.7672038567290569E-02 + 0.7663202303954611E-02 + 0.7654375305217042E-02 + 0.7645557562383766E-02 + 0.7636749066749518E-02 + 0.7627949809543122E-02 + 0.7619159781969516E-02 + 0.7610378975241250E-02 + 0.7601607380620770E-02 + 0.7592844989390326E-02 + 0.7584091792832863E-02 + 0.7575347782235584E-02 + 0.7566612948887546E-02 + 0.7557887284086639E-02 + 0.7549170779200045E-02 + 0.7540463425627752E-02 + 0.7531765214753338E-02 + 0.7523076137816208E-02 + 0.7514396185981525E-02 + 0.7505725350438665E-02 + 0.7497063622616819E-02 + 0.7488410994079353E-02 + 0.7479767456375485E-02 + 0.7471133000885968E-02 + 0.7462507618889238E-02 + 0.7453891301667211E-02 + 0.7445284040561456E-02 + 0.7436685826952818E-02 + 0.7428096652226355E-02 + 0.7419516507814247E-02 + 0.7410945385182387E-02 + 0.7402383275796925E-02 + 0.7393830171116576E-02 + 0.7385286062594370E-02 + 0.7376750941682225E-02 + 0.7368224799816556E-02 + 0.7359707628420662E-02 + 0.7351199418920916E-02 + 0.7342700162810491E-02 + 0.7334209851643613E-02 + 0.7325728476975122E-02 + 0.7317256030324700E-02 + 0.7308792503177158E-02 + 0.7300337887014839E-02 + 0.7291892173293837E-02 + 0.7283455353442153E-02 + 0.7275027418890772E-02 + 0.7266608361203561E-02 + 0.7258198172098594E-02 + 0.7249796843299212E-02 + 0.7241404366409809E-02 + 0.7233020732885256E-02 + 0.7224645934172633E-02 + 0.7216279961790826E-02 + 0.7207922807356603E-02 + 0.7199574462493718E-02 + 0.7191234918825519E-02 + 0.7182904167974613E-02 + 0.7174582201563801E-02 + 0.7166269011231075E-02 + 0.7157964588638849E-02 + 0.7149668925451031E-02 + 0.7141382013274539E-02 + 0.7133103843617023E-02 + 0.7124834407977410E-02 + 0.7116573697986267E-02 + 0.7108321705523528E-02 + 0.7100078422496077E-02 + 0.7091843840691801E-02 + 0.7083617951653253E-02 + 0.7075400746893157E-02 + 0.7067192218011281E-02 + 0.7058992356802644E-02 + 0.7050801155088731E-02 + 0.7042618604639879E-02 + 0.7034444697101300E-02 + 0.7026279424099524E-02 + 0.7018122777323271E-02 + 0.7009974748627517E-02 + 0.7001835329894691E-02 + 0.6993704512966254E-02 + 0.6985582289564068E-02 + 0.6977468651388276E-02 + 0.6969363590147779E-02 + 0.6961267097579198E-02 + 0.6953179165424737E-02 + 0.6945099785470178E-02 + 0.6937028949654074E-02 + 0.6928966649948334E-02 + 0.6920912878270279E-02 + 0.6912867626327710E-02 + 0.6904830885778202E-02 + 0.6896802648339672E-02 + 0.6888782905983987E-02 + 0.6880771650749789E-02 + 0.6872768874625619E-02 + 0.6864774569368954E-02 + 0.6856788726670721E-02 + 0.6848811338269273E-02 + 0.6840842396142895E-02 + 0.6832881892345589E-02 + 0.6824929818902767E-02 + 0.6816986167680854E-02 + 0.6809050930491325E-02 + 0.6801124099164351E-02 + 0.6793205665644329E-02 + 0.6785295621918883E-02 + 0.6777393959972673E-02 + 0.6769500671770422E-02 + 0.6761615749268585E-02 + 0.6753739184419255E-02 + 0.6745870969142126E-02 + 0.6738011095342323E-02 + 0.6730159554942818E-02 + 0.6722316340013206E-02 + 0.6714481442694808E-02 + 0.6706654855112765E-02 + 0.6698836569241118E-02 + 0.6691026576973409E-02 + 0.6683224870209080E-02 + 0.6675431440914439E-02 + 0.6667646281094511E-02 + 0.6659869382766593E-02 + 0.6652100738080815E-02 + 0.6644340339270771E-02 + 0.6636588178554169E-02 + 0.6628844247932446E-02 + 0.6621108539259620E-02 + 0.6613381044404044E-02 + 0.6605661755476612E-02 + 0.6597950664767646E-02 + 0.6590247764561287E-02 + 0.6582553046976357E-02 + 0.6574866503999078E-02 + 0.6567188127616404E-02 + 0.6559517909896291E-02 + 0.6551855842977048E-02 + 0.6544201919002013E-02 + 0.6536556130168936E-02 + 0.6528918468726897E-02 + 0.6521288926923642E-02 + 0.6513667496926833E-02 + 0.6506054170822471E-02 + 0.6498448940695059E-02 + 0.6490851798689878E-02 + 0.6483262737019281E-02 + 0.6475681747900016E-02 + 0.6468108823577384E-02 + 0.6460543956331017E-02 + 0.6452987138440590E-02 + 0.6445438362110661E-02 + 0.6437897619448224E-02 + 0.6430364902555735E-02 + 0.6422840203625418E-02 + 0.6415323514975878E-02 + 0.6407814828934686E-02 + 0.6400314137798501E-02 + 0.6392821433816756E-02 + 0.6385336709235400E-02 + 0.6377859956336835E-02 + 0.6370391167463851E-02 + 0.6362930334964498E-02 + 0.6355477451148878E-02 + 0.6348032508258806E-02 + 0.6340595498529245E-02 + 0.6333166414238005E-02 + 0.6325745247746721E-02 + 0.6318331991426801E-02 + 0.6310926637648995E-02 + 0.6303529178782805E-02 + 0.6296139607197413E-02 + 0.6288757915226877E-02 + 0.6281384095123541E-02 + 0.6274018139128367E-02 + 0.6266660039558793E-02 + 0.6259309788926064E-02 + 0.6251967379771594E-02 + 0.6244632804586821E-02 + 0.6237306055724901E-02 + 0.6229987125515293E-02 + 0.6222676006312756E-02 + 0.6215372690548681E-02 + 0.6208077170668897E-02 + 0.6200789439111669E-02 + 0.6193509488289956E-02 + 0.6186237310611502E-02 + 0.6178972898490656E-02 + 0.6171716244365716E-02 + 0.6164467340680409E-02 + 0.6157226179896843E-02 + 0.6149992754550256E-02 + 0.6142767057194072E-02 + 0.6135549080375050E-02 + 0.6128338816610873E-02 + 0.6121136258411305E-02 + 0.6113941398265245E-02 + 0.6106754228561758E-02 + 0.6099574741660090E-02 + 0.6092402929973448E-02 + 0.6085238786198418E-02 + 0.6078082303124330E-02 + 0.6070933473484850E-02 + 0.6063792289692238E-02 + 0.6056658744043655E-02 + 0.6049532828883084E-02 + 0.6042414536852368E-02 + 0.6035303860709885E-02 + 0.6028200793189086E-02 + 0.6021105326847577E-02 + 0.6014017454167956E-02 + 0.6006937167649767E-02 + 0.5999864459925696E-02 + 0.5992799323690306E-02 + 0.5985741751628238E-02 + 0.5978691736336163E-02 + 0.5971649270366303E-02 + 0.5964614346279674E-02 + 0.5957586956723999E-02 + 0.5950567094394677E-02 + 0.5943554751987524E-02 + 0.5936549922197107E-02 + 0.5929552597717298E-02 + 0.5922562771235317E-02 + 0.5915580435360592E-02 + 0.5908605582652047E-02 + 0.5901638205681726E-02 + 0.5894678297205250E-02 + 0.5887725850107612E-02 + 0.5880780857264814E-02 + 0.5873843311379671E-02 + 0.5866913205022653E-02 + 0.5859990530770415E-02 + 0.5853075281359645E-02 + 0.5846167449659527E-02 + 0.5839267028536445E-02 + 0.5832374010727070E-02 + 0.5825488388851669E-02 + 0.5818610155532829E-02 + 0.5811739303534558E-02 + 0.5804875825758429E-02 + 0.5798019715106904E-02 + 0.5791170964360706E-02 + 0.5784329566172339E-02 + 0.5777495513193044E-02 + 0.5770668798217678E-02 + 0.5763849414204891E-02 + 0.5757037354120310E-02 + 0.5750232610860468E-02 + 0.5743435177236485E-02 + 0.5736645046053145E-02 + 0.5729862210072465E-02 + 0.5723086661999156E-02 + 0.5716318394536728E-02 + 0.5709557400530338E-02 + 0.5702803673031154E-02 + 0.5696057205104941E-02 + 0.5689317989713512E-02 + 0.5682586019654763E-02 + 0.5675861287712650E-02 + 0.5669143786713493E-02 + 0.5662433509556064E-02 + 0.5655730449146303E-02 + 0.5649034598393275E-02 + 0.5642345950211900E-02 + 0.5635664497517831E-02 + 0.5628990233243373E-02 + 0.5622323150354513E-02 + 0.5615663241821332E-02 + 0.5609010500610385E-02 + 0.5602364919680573E-02 + 0.5595726491989751E-02 + 0.5589095210494286E-02 + 0.5582471068146858E-02 + 0.5575854057899648E-02 + 0.5569244172713457E-02 + 0.5562641405571847E-02 + 0.5556045749462040E-02 + 0.5549457197389753E-02 + 0.5542875742413774E-02 + 0.5536301377602299E-02 + 0.5529734095993362E-02 + 0.5523173890530164E-02 + 0.5516620754137398E-02 + 0.5510074679793377E-02 + 0.5503535660660843E-02 + 0.5497003689942152E-02 + 0.5490478760782970E-02 + 0.5483960866115405E-02 + 0.5477449998821264E-02 + 0.5470946151840083E-02 + 0.5464449318349958E-02 + 0.5457959491590527E-02 + 0.5451476664764952E-02 + 0.5445000830911009E-02 + 0.5438531983019685E-02 + 0.5432070114109361E-02 + 0.5425615217334570E-02 + 0.5419167285892087E-02 + 0.5412726312961437E-02 + 0.5406292291627918E-02 + 0.5399865214944837E-02 + 0.5393445075982058E-02 + 0.5387031867908619E-02 + 0.5380625583930345E-02 + 0.5374226217249651E-02 + 0.5367833761045961E-02 + 0.5361448208489415E-02 + 0.5355069552749293E-02 + 0.5348697786988886E-02 + 0.5342332904368858E-02 + 0.5335974898055533E-02 + 0.5329623761261058E-02 + 0.5323279487219588E-02 + 0.5316942069160681E-02 + 0.5310611500271376E-02 + 0.5304287773716482E-02 + 0.5297970882673006E-02 + 0.5291660820440271E-02 + 0.5285357580387204E-02 + 0.5279061155866613E-02 + 0.5272771540045246E-02 + 0.5266488725974821E-02 + 0.5260212706725055E-02 + 0.5253943475607685E-02 + 0.5247681026096956E-02 + 0.5241425351657637E-02 + 0.5235176445583125E-02 + 0.5228934301041988E-02 + 0.5222698911205923E-02 + 0.5216470269338293E-02 + 0.5210248368774922E-02 + 0.5204033202855161E-02 + 0.5197824764946496E-02 + 0.5191623048440388E-02 + 0.5185428046724780E-02 + 0.5179239753100942E-02 + 0.5173058160789795E-02 + 0.5166883263013606E-02 + 0.5160715053095948E-02 + 0.5154553524462168E-02 + 0.5148398670541630E-02 + 0.5142250484751435E-02 + 0.5136108960495360E-02 + 0.5129974091175039E-02 + 0.5123845870145991E-02 + 0.5117724290709303E-02 + 0.5111609346165538E-02 + 0.5105501029912325E-02 + 0.5099399335471250E-02 + 0.5093304256370425E-02 + 0.5087215786068220E-02 + 0.5081133917926390E-02 + 0.5075058645299841E-02 + 0.5068989961557579E-02 + 0.5062927860089779E-02 + 0.5056872334289634E-02 + 0.5050823377636698E-02 + 0.5044780983751382E-02 + 0.5038745146265709E-02 + 0.5032715858691468E-02 + 0.5026693114327409E-02 + 0.5020676906451321E-02 + 0.5014667228443165E-02 + 0.5008664073879718E-02 + 0.5002667436359991E-02 + 0.4996677309462141E-02 + 0.4990693686720515E-02 + 0.4984716561663929E-02 + 0.4978745927809788E-02 + 0.4972781778649550E-02 + 0.4966824107671089E-02 + 0.4960872908367104E-02 + 0.4954928174242347E-02 + 0.4948989898803470E-02 + 0.4943058075600595E-02 + 0.4937132698301933E-02 + 0.4931213760595570E-02 + 0.4925301256100231E-02 + 0.4919395178228467E-02 + 0.4913495520354652E-02 + 0.4907602275939993E-02 + 0.4901715438728322E-02 + 0.4895835002520917E-02 + 0.4889960961060079E-02 + 0.4884093307877789E-02 + 0.4878232036459163E-02 + 0.4872377140321897E-02 + 0.4866528613111063E-02 + 0.4860686448502863E-02 + 0.4854850640170824E-02 + 0.4849021181777119E-02 + 0.4843198066980825E-02 + 0.4837381289423703E-02 + 0.4831570842666126E-02 + 0.4825766720244534E-02 + 0.4819968915732754E-02 + 0.4814177422897351E-02 + 0.4808392235566922E-02 + 0.4802613347548831E-02 + 0.4796840752530208E-02 + 0.4791074444155875E-02 + 0.4785314416071878E-02 + 0.4779560661932029E-02 + 0.4773813175393125E-02 + 0.4768071950124603E-02 + 0.4762336979882552E-02 + 0.4756608258459404E-02 + 0.4750885779637408E-02 + 0.4745169537120971E-02 + 0.4739459524578899E-02 + 0.4733755735690458E-02 + 0.4728058164224041E-02 + 0.4722366803992383E-02 + 0.4716681648807095E-02 + 0.4711002692465964E-02 + 0.4705329928759347E-02 + 0.4699663351474487E-02 + 0.4694002954367117E-02 + 0.4688348731174449E-02 + 0.4682700675634476E-02 + 0.4677058781497011E-02 + 0.4671423042519384E-02 + 0.4665793452467214E-02 + 0.4660170005210770E-02 + 0.4654552694692994E-02 + 0.4648941514853669E-02 + 0.4643336459566561E-02 + 0.4637737522655717E-02 + 0.4632144697939765E-02 + 0.4626557979167878E-02 + 0.4620977360032654E-02 + 0.4615402834236870E-02 + 0.4609834395703730E-02 + 0.4604272038551073E-02 + 0.4598715756891382E-02 + 0.4593165544580200E-02 + 0.4587621395227130E-02 + 0.4582083302443163E-02 + 0.4576551260115874E-02 + 0.4571025262419667E-02 + 0.4565505303533810E-02 + 0.4559991377396961E-02 + 0.4554483477677429E-02 + 0.4548981598035163E-02 + 0.4543485732332326E-02 + 0.4537995874677279E-02 + 0.4532512019190583E-02 + 0.4527034159883602E-02 + 0.4521562290623668E-02 + 0.4516096405269555E-02 + 0.4510636497743561E-02 + 0.4505182562058897E-02 + 0.4499734592234706E-02 + 0.4494292582227415E-02 + 0.4488856525896056E-02 + 0.4483426417092671E-02 + 0.4478002249774107E-02 + 0.4472584018073932E-02 + 0.4467171716142171E-02 + 0.4461765338073533E-02 + 0.4456364877861438E-02 + 0.4450970329488334E-02 + 0.4445581686918430E-02 + 0.4440198944079529E-02 + 0.4434822094895418E-02 + 0.4429451133344467E-02 + 0.4424086053523482E-02 + 0.4418726849544716E-02 + 0.4413373515507081E-02 + 0.4408026045477923E-02 + 0.4402684433520058E-02 + 0.4397348673698589E-02 + 0.4392018760084607E-02 + 0.4386694686750162E-02 + 0.4381376447770185E-02 + 0.4376064037227824E-02 + 0.4370757449207641E-02 + 0.4365456677781499E-02 + 0.4360161716982135E-02 + 0.4354872560834732E-02 + 0.4349589203408705E-02 + 0.4344311638922749E-02 + 0.4339039861627026E-02 + 0.4333773865736793E-02 + 0.4328513645338211E-02 + 0.4323259194487600E-02 + 0.4318010507260870E-02 + 0.4312767577813531E-02 + 0.4307530400321260E-02 + 0.4302298968949563E-02 + 0.4297073277818592E-02 + 0.4291853321035887E-02 + 0.4286639092729790E-02 + 0.4281430587130133E-02 + 0.4276227798497657E-02 + 0.4271030721079157E-02 + 0.4265839349046702E-02 + 0.4260653676547481E-02 + 0.4255473697738120E-02 + 0.4250299406831040E-02 + 0.4245130798058998E-02 + 0.4239967865653439E-02 + 0.4234810603837211E-02 + 0.4229659006829712E-02 + 0.4224513068847479E-02 + 0.4219372784086712E-02 + 0.4214238146734780E-02 + 0.4209109150990229E-02 + 0.4203985791139989E-02 + 0.4198868061512777E-02 + 0.4193755956430300E-02 + 0.4188649470150963E-02 + 0.4183548596900597E-02 + 0.4178453330908244E-02 + 0.4173363666436811E-02 + 0.4168279597768155E-02 + 0.4163201119189422E-02 + 0.4158128225042023E-02 + 0.4153060909700411E-02 + 0.4147999167529424E-02 + 0.4142942992772953E-02 + 0.4137892379594959E-02 + 0.4132847322171376E-02 + 0.4127807814858350E-02 + 0.4122773852141195E-02 + 0.4117745428499951E-02 + 0.4112722538292472E-02 + 0.4107705175781685E-02 + 0.4102693335232662E-02 + 0.4097687010990462E-02 + 0.4092686197467498E-02 + 0.4087690889073864E-02 + 0.4082701080132943E-02 + 0.4077716764889007E-02 + 0.4072737937590331E-02 + 0.4067764592640848E-02 + 0.4062796724598313E-02 + 0.4057834328022495E-02 + 0.4052877397354513E-02 + 0.4047925926908482E-02 + 0.4042979910993080E-02 + 0.4038039343941881E-02 + 0.4033104220117324E-02 + 0.4028174533886386E-02 + 0.4023250279720538E-02 + 0.4018331452222686E-02 + 0.4013418046000393E-02 + 0.4008510055500861E-02 + 0.4003607474952709E-02 + 0.3998710298572336E-02 + 0.3993818520761159E-02 + 0.3988932136193998E-02 + 0.3984051139565215E-02 + 0.3979175525402842E-02 + 0.3974305287968078E-02 + 0.3969440421500030E-02 + 0.3964580920406077E-02 + 0.3959726779386774E-02 + 0.3954877993170896E-02 + 0.3950034556347821E-02 + 0.3945196463242939E-02 + 0.3940363708152967E-02 + 0.3935536285489333E-02 + 0.3930714189899952E-02 + 0.3925897416061626E-02 + 0.3921085958586957E-02 + 0.3916279811944348E-02 + 0.3911478970582621E-02 + 0.3906683428977076E-02 + 0.3901893181667935E-02 + 0.3897108223205196E-02 + 0.3892328548148305E-02 + 0.3887554151082020E-02 + 0.3882785026595301E-02 + 0.3878021169267740E-02 + 0.3873262573651634E-02 + 0.3868509234294326E-02 + 0.3863761145769530E-02 + 0.3859018302735235E-02 + 0.3854280699866248E-02 + 0.3849548331789407E-02 + 0.3844821192963575E-02 + 0.3840099277810817E-02 + 0.3835382580831734E-02 + 0.3830671096828415E-02 + 0.3825964820675327E-02 + 0.3821263747171083E-02 + 0.3816567870795077E-02 + 0.3811877185942709E-02 + 0.3807191687064951E-02 + 0.3802511368869332E-02 + 0.3797836226137355E-02 + 0.3793166253624038E-02 + 0.3788501445950070E-02 + 0.3783841797693735E-02 + 0.3779187303458198E-02 + 0.3774537957985177E-02 + 0.3769893756064240E-02 + 0.3765254692462610E-02 + 0.3760620761810615E-02 + 0.3755991958686897E-02 + 0.3751368277689196E-02 + 0.3746749713544498E-02 + 0.3742136261033069E-02 + 0.3737527914921306E-02 + 0.3732924669871292E-02 + 0.3728326520498233E-02 + 0.3723733461435570E-02 + 0.3719145487468085E-02 + 0.3714562593454639E-02 + 0.3709984774243540E-02 + 0.3705412024582668E-02 + 0.3700844339166428E-02 + 0.3696281712687906E-02 + 0.3691724139832158E-02 + 0.3687171615279579E-02 + 0.3682624133721850E-02 + 0.3678081689977766E-02 + 0.3673544278946089E-02 + 0.3669011895517031E-02 + 0.3664484534457745E-02 + 0.3659962190451390E-02 + 0.3655444858188149E-02 + 0.3650932532480231E-02 + 0.3646425208230184E-02 + 0.3641922880334597E-02 + 0.3637425543561363E-02 + 0.3632933192575084E-02 + 0.3628445822046410E-02 + 0.3623963426808629E-02 + 0.3619486001836456E-02 + 0.3615013542105384E-02 + 0.3610546042509083E-02 + 0.3606083497864112E-02 + 0.3601625902982341E-02 + 0.3597173252635164E-02 + 0.3592725541552671E-02 + 0.3588282764467862E-02 + 0.3583844916246368E-02 + 0.3579411991900514E-02 + 0.3574983986447275E-02 + 0.3570560894808298E-02 + 0.3566142711791037E-02 + 0.3561729432197825E-02 + 0.3557321050894899E-02 + 0.3552917562831470E-02 + 0.3548518962960758E-02 + 0.3544125246164432E-02 + 0.3539736407223348E-02 + 0.3535352440913089E-02 + 0.3530973342142494E-02 + 0.3526599106023979E-02 + 0.3522229727685269E-02 + 0.3517865202119179E-02 + 0.3513505524094791E-02 + 0.3509150688361198E-02 + 0.3504800689770065E-02 + 0.3500455523357876E-02 + 0.3496115184179993E-02 + 0.3491779667228165E-02 + 0.3487448967369522E-02 + 0.3483123079457204E-02 + 0.3478801998429154E-02 + 0.3474485719404177E-02 + 0.3470174237523989E-02 + 0.3465867547846205E-02 + 0.3461565645232854E-02 + 0.3457268524518429E-02 + 0.3452976180612364E-02 + 0.3448688608614230E-02 + 0.3444405803653206E-02 + 0.3440127760805385E-02 + 0.3435854474999900E-02 + 0.3431585941140658E-02 + 0.3427322154169685E-02 + 0.3423063109144502E-02 + 0.3418808801144424E-02 + 0.3414559225239716E-02 + 0.3410314376470609E-02 + 0.3406074249871111E-02 + 0.3401838840476301E-02 + 0.3397608143325093E-02 + 0.3393382153457270E-02 + 0.3389160865916319E-02 + 0.3384944275760576E-02 + 0.3380732378052085E-02 + 0.3376525167871272E-02 + 0.3372322640378988E-02 + 0.3368124790758051E-02 + 0.3363931614151148E-02 + 0.3359743105508771E-02 + 0.3355559259723910E-02 + 0.3351380071738668E-02 + 0.3347205536753299E-02 + 0.3343035650052622E-02 + 0.3338870406898891E-02 + 0.3334709802423820E-02 + 0.3330553831712338E-02 + 0.3326402489846985E-02 + 0.3322255771895449E-02 + 0.3318113672919636E-02 + 0.3313976187988369E-02 + 0.3309843312219123E-02 + 0.3305715040750137E-02 + 0.3301591368731777E-02 + 0.3297472291407216E-02 + 0.3293357804062834E-02 + 0.3289247901968078E-02 + 0.3285142580245845E-02 + 0.3281041833944786E-02 + 0.3276945658123092E-02 + 0.3272854047934775E-02 + 0.3268766998586612E-02 + 0.3264684505287754E-02 + 0.3260606563266502E-02 + 0.3256533167762633E-02 + 0.3252464314012452E-02 + 0.3248399997209851E-02 + 0.3244340212521142E-02 + 0.3240284955114228E-02 + 0.3236234220183801E-02 + 0.3232188002943470E-02 + 0.3228146298610771E-02 + 0.3224109102455642E-02 + 0.3220076409788065E-02 + 0.3216048215912170E-02 + 0.3212024516016789E-02 + 0.3208005305195222E-02 + 0.3203990578547220E-02 + 0.3199980331351280E-02 + 0.3195974559046423E-02 + 0.3191973257069977E-02 + 0.3187976420696756E-02 + 0.3183984045043469E-02 + 0.3179996125226498E-02 + 0.3176012656519549E-02 + 0.3172033634362173E-02 + 0.3168059054196269E-02 + 0.3164088911299344E-02 + 0.3160123200761127E-02 + 0.3156161917667060E-02 + 0.3152205057310862E-02 + 0.3148252615244028E-02 + 0.3144304587029108E-02 + 0.3140360968022810E-02 + 0.3136421753305678E-02 + 0.3132486937942409E-02 + 0.3128556517175105E-02 + 0.3124630486504066E-02 + 0.3120708841448453E-02 + 0.3116791577434621E-02 + 0.3112878689742309E-02 + 0.3108970173638880E-02 + 0.3105066024434766E-02 + 0.3101166237514285E-02 + 0.3097270808268899E-02 + 0.3093379732080464E-02 + 0.3089493004312893E-02 + 0.3085610620328121E-02 + 0.3081732575486162E-02 + 0.3077858865143168E-02 + 0.3073989484654915E-02 + 0.3070124429392739E-02 + 0.3066263694762396E-02 + 0.3062407276174241E-02 + 0.3058555169039463E-02 + 0.3054707368771252E-02 + 0.3050863870783061E-02 + 0.3047024670471775E-02 + 0.3043189763190752E-02 + 0.3039359144286335E-02 + 0.3035532809165458E-02 + 0.3031710753409034E-02 + 0.3027892972629001E-02 + 0.3024079462363952E-02 + 0.3020270217922113E-02 + 0.3016465234566584E-02 + 0.3012664507612140E-02 + 0.3008868032551258E-02 + 0.3005075804914617E-02 + 0.3001287820219684E-02 + 0.2997504073934049E-02 + 0.2993724561513554E-02 + 0.2989949278419160E-02 + 0.2986178220133022E-02 + 0.2982411382142751E-02 + 0.2978648759928299E-02 + 0.2974890348934862E-02 + 0.2971136144597810E-02 + 0.2967386142376078E-02 + 0.2963640337845888E-02 + 0.2959898726619848E-02 + 0.2956161304283427E-02 + 0.2952428066273913E-02 + 0.2948699007978254E-02 + 0.2944974124815270E-02 + 0.2941253412395191E-02 + 0.2937536866399293E-02 + 0.2933824482479250E-02 + 0.2930116256090604E-02 + 0.2926412182609375E-02 + 0.2922712257435816E-02 + 0.2919016476148017E-02 + 0.2915324834402712E-02 + 0.2911637327843590E-02 + 0.2907953952006937E-02 + 0.2904274702377307E-02 + 0.2900599574452269E-02 + 0.2896928563847922E-02 + 0.2893261666242491E-02 + 0.2889598877304219E-02 + 0.2885940192597502E-02 + 0.2882285607627543E-02 + 0.2878635117902646E-02 + 0.2874988718972616E-02 + 0.2871346406412989E-02 + 0.2867708175804459E-02 + 0.2864074022786804E-02 + 0.2860443943039449E-02 + 0.2856817932240286E-02 + 0.2853195986035628E-02 + 0.2849578100048793E-02 + 0.2845964269899489E-02 + 0.2842354491159259E-02 + 0.2838748759361622E-02 + 0.2835147070044978E-02 + 0.2831549418852428E-02 + 0.2827955801516638E-02 + 0.2824366213771325E-02 + 0.2820780651312713E-02 + 0.2817199109802284E-02 + 0.2813621584897772E-02 + 0.2810048072201018E-02 + 0.2806478567257662E-02 + 0.2802913065616492E-02 + 0.2799351562976562E-02 + 0.2795794055200570E-02 + 0.2792240538154838E-02 + 0.2788691007560078E-02 + 0.2785145458965233E-02 + 0.2781603887910902E-02 + 0.2778066289995285E-02 + 0.2774532660890231E-02 + 0.2771002996274248E-02 + 0.2767477291910575E-02 + 0.2763955543679889E-02 + 0.2760437747469152E-02 + 0.2756923899036209E-02 + 0.2753413993944776E-02 + 0.2749908027744080E-02 + 0.2746405996087569E-02 + 0.2742907894798811E-02 + 0.2739413719716381E-02 + 0.2735923466618855E-02 + 0.2732437131178455E-02 + 0.2728954709057041E-02 + 0.2725476195981329E-02 + 0.2722001587803079E-02 + 0.2718530880387886E-02 + 0.2715064069539102E-02 + 0.2711601150929482E-02 + 0.2708142120215591E-02 + 0.2704686973110216E-02 + 0.2701235705454709E-02 + 0.2697788313108178E-02 + 0.2694344791885673E-02 + 0.2690905137492336E-02 + 0.2687469345616572E-02 + 0.2684037412010190E-02 + 0.2680609332597633E-02 + 0.2677185103332413E-02 + 0.2673764720114277E-02 + 0.2670348178683017E-02 + 0.2666935474748767E-02 + 0.2663526604034228E-02 + 0.2660121562302975E-02 + 0.2656720345326923E-02 + 0.2653322948917461E-02 + 0.2649929369026961E-02 + 0.2646539601639227E-02 + 0.2643153642693314E-02 + 0.2639771487953083E-02 + 0.2636393133139556E-02 + 0.2633018574003681E-02 + 0.2629647806424677E-02 + 0.2626280826316181E-02 + 0.2622917629581027E-02 + 0.2619558212071214E-02 + 0.2616202569623827E-02 + 0.2612850698090458E-02 + 0.2609502593397679E-02 + 0.2606158251496203E-02 + 0.2602817668317996E-02 + 0.2599480839688749E-02 + 0.2596147761396741E-02 + 0.2592818429241141E-02 + 0.2589492839089130E-02 + 0.2586170986834058E-02 + 0.2582852868385404E-02 + 0.2579538479763018E-02 + 0.2576227817033050E-02 + 0.2572920876231464E-02 + 0.2569617653164507E-02 + 0.2566318143533326E-02 + 0.2563022343070052E-02 + 0.2559730247770655E-02 + 0.2556441853762568E-02 + 0.2553157157156746E-02 + 0.2549876153902352E-02 + 0.2546598839860876E-02 + 0.2543325210892744E-02 + 0.2540055262856427E-02 + 0.2536788991609240E-02 + 0.2533526393022562E-02 + 0.2530267463129583E-02 + 0.2527012198066968E-02 + 0.2523760593961806E-02 + 0.2520512646796303E-02 + 0.2517268352452126E-02 + 0.2514027706812929E-02 + 0.2510790705820628E-02 + 0.2507557345460985E-02 + 0.2504327621722311E-02 + 0.2501101530616802E-02 + 0.2497879068176168E-02 + 0.2494660230430675E-02 + 0.2491445013373304E-02 + 0.2488233412964044E-02 + 0.2485025425162506E-02 + 0.2481821045944294E-02 + 0.2478620271300353E-02 + 0.2475423097225255E-02 + 0.2472229519787964E-02 + 0.2469039535134630E-02 + 0.2465853139411320E-02 + 0.2462670328658460E-02 + 0.2459491098797751E-02 + 0.2456315445746271E-02 + 0.2453143365478202E-02 + 0.2449974854037346E-02 + 0.2446809907473064E-02 + 0.2443648521890154E-02 + 0.2440490693466567E-02 + 0.2437336418383345E-02 + 0.2434185692727322E-02 + 0.2431038512450461E-02 + 0.2427894873495454E-02 + 0.2424754771873030E-02 + 0.2421618203699656E-02 + 0.2418485165100637E-02 + 0.2415355652179048E-02 + 0.2412229661000453E-02 + 0.2409107187627044E-02 + 0.2405988228144218E-02 + 0.2402872778679877E-02 + 0.2399760835366467E-02 + 0.2396652394335574E-02 + 0.2393547451717046E-02 + 0.2390446003640430E-02 + 0.2387348046218150E-02 + 0.2384253575525517E-02 + 0.2381162587632972E-02 + 0.2378075078617462E-02 + 0.2374991044571309E-02 + 0.2371910481589169E-02 + 0.2368833385810293E-02 + 0.2365759753489136E-02 + 0.2362689580898420E-02 + 0.2359622864239970E-02 + 0.2356559599515565E-02 + 0.2353499782691997E-02 + 0.2350443409821372E-02 + 0.2347390477219149E-02 + 0.2344340981251408E-02 + 0.2341294918199961E-02 + 0.2338252284061833E-02 + 0.2335213074773963E-02 + 0.2332177286355128E-02 + 0.2329144915127250E-02 + 0.2326115957482408E-02 + 0.2323090409761180E-02 + 0.2320068268094979E-02 + 0.2317049528562138E-02 + 0.2314034187263903E-02 + 0.2311022240403445E-02 + 0.2308013684212295E-02 + 0.2305008514910659E-02 + 0.2302006728663444E-02 + 0.2299008321618694E-02 + 0.2296013289946629E-02 + 0.2293021629936373E-02 + 0.2290033337916726E-02 + 0.2287048410193436E-02 + 0.2284066842936406E-02 + 0.2281088632265983E-02 + 0.2278113774324542E-02 + 0.2275142265397514E-02 + 0.2272174101827335E-02 + 0.2269209279934399E-02 + 0.2266247795880789E-02 + 0.2263289645759781E-02 + 0.2260334825691683E-02 + 0.2257383332011947E-02 + 0.2254435161157927E-02 + 0.2251490309548751E-02 + 0.2248548773439533E-02 + 0.2245610549000860E-02 + 0.2242675632407600E-02 + 0.2239744019882968E-02 + 0.2236815707677264E-02 + 0.2233890692049836E-02 + 0.2230968969353965E-02 + 0.2228050536000141E-02 + 0.2225135388385811E-02 + 0.2222223522741881E-02 + 0.2219314935189177E-02 + 0.2216409621861447E-02 + 0.2213507579093010E-02 + 0.2210608803362008E-02 + 0.2207713291139288E-02 + 0.2204821038737416E-02 + 0.2201932042345891E-02 + 0.2199046298156146E-02 + 0.2196163802448325E-02 + 0.2193284551577364E-02 + 0.2190408541901602E-02 + 0.2187535769800450E-02 + 0.2184666231672543E-02 + 0.2181799923914573E-02 + 0.2178936842863627E-02 + 0.2176076984797807E-02 + 0.2173220345993088E-02 + 0.2170366922735551E-02 + 0.2167516711322095E-02 + 0.2164669708053796E-02 + 0.2161825909343265E-02 + 0.2158985311732625E-02 + 0.2156147911766804E-02 + 0.2153313705828804E-02 + 0.2150482690097932E-02 + 0.2147654860744388E-02 + 0.2144830214106628E-02 + 0.2142008746752564E-02 + 0.2139190455263529E-02 + 0.2136375336057709E-02 + 0.2133563385311936E-02 + 0.2130754599185898E-02 + 0.2127948973994032E-02 + 0.2125146506299252E-02 + 0.2122347192686064E-02 + 0.2119551029668282E-02 + 0.2116758013636456E-02 + 0.2113968140968677E-02 + 0.2111181408033262E-02 + 0.2108397811180038E-02 + 0.2105617346756991E-02 + 0.2102840011146171E-02 + 0.2100065800799910E-02 + 0.2097294712179231E-02 + 0.2094526741747538E-02 + 0.2091761885973612E-02 + 0.2089000141326836E-02 + 0.2086241504238082E-02 + 0.2083485971043832E-02 + 0.2080733538066540E-02 + 0.2077984201717179E-02 + 0.2075237958643660E-02 + 0.2072494805533002E-02 + 0.2069754738971308E-02 + 0.2067017755249458E-02 + 0.2064283850604679E-02 + 0.2061553021347970E-02 + 0.2058825264026512E-02 + 0.2056100575234621E-02 + 0.2053378951544545E-02 + 0.2050660389451145E-02 + 0.2047944885432326E-02 + 0.2045232435947434E-02 + 0.2042523037384499E-02 + 0.2039816686114434E-02 + 0.2037113378560151E-02 + 0.2034413111363734E-02 + 0.2031715881224964E-02 + 0.2029021684793822E-02 + 0.2026330518490155E-02 + 0.2023642378667428E-02 + 0.2020957261704406E-02 + 0.2018275164108248E-02 + 0.2015596082426693E-02 + 0.2012920013207519E-02 + 0.2010246952998612E-02 + 0.2007576898347912E-02 + 0.2004909845805522E-02 + 0.2002245791934859E-02 + 0.1999584733304367E-02 + 0.1996926666474687E-02 + 0.1994271587953794E-02 + 0.1991619494227933E-02 + 0.1988970381791191E-02 + 0.1986324247196275E-02 + 0.1983681087022273E-02 + 0.1981040897842787E-02 + 0.1978403676185420E-02 + 0.1975769418555220E-02 + 0.1973138121470726E-02 + 0.1970509781574387E-02 + 0.1967884395574736E-02 + 0.1965261960162587E-02 + 0.1962642471843931E-02 + 0.1960025927017645E-02 + 0.1957412322101659E-02 + 0.1954801653742698E-02 + 0.1952193918731497E-02 + 0.1949589113842771E-02 + 0.1946987235621532E-02 + 0.1944388280455896E-02 + 0.1941792244745416E-02 + 0.1939199125094125E-02 + 0.1936608918257547E-02 + 0.1934021620987268E-02 + 0.1931437229915223E-02 + 0.1928855741577272E-02 + 0.1926277152509335E-02 + 0.1923701459297835E-02 + 0.1921128658573141E-02 + 0.1918558746968211E-02 + 0.1915991721139014E-02 + 0.1913427577763229E-02 + 0.1910866313517992E-02 + 0.1908307925047312E-02 + 0.1905752408961330E-02 + 0.1903199761868949E-02 + 0.1900649980386980E-02 + 0.1898103061141001E-02 + 0.1895559000757032E-02 + 0.1893017795861229E-02 + 0.1890479443079890E-02 + 0.1887943939041437E-02 + 0.1885411280455932E-02 + 0.1882881464139577E-02 + 0.1880354486912665E-02 + 0.1877830345454715E-02 + 0.1875309036246815E-02 + 0.1872790555757507E-02 + 0.1870274900593425E-02 + 0.1867762067572316E-02 + 0.1865252053528490E-02 + 0.1862744855204971E-02 + 0.1860240469193256E-02 + 0.1857738892071381E-02 + 0.1855240120494946E-02 + 0.1852744151259436E-02 + 0.1850250981174405E-02 + 0.1847760606973604E-02 + 0.1845273025242149E-02 + 0.1842788232548376E-02 + 0.1840306225550027E-02 + 0.1837827001095630E-02 + 0.1835350556057911E-02 + 0.1832876887218880E-02 + 0.1830405991149567E-02 + 0.1827937864391269E-02 + 0.1825472503580810E-02 + 0.1823009905597502E-02 + 0.1820550067358449E-02 + 0.1818092985707744E-02 + 0.1815638657287028E-02 + 0.1813187078703178E-02 + 0.1810738246610550E-02 + 0.1808292157807486E-02 + 0.1805848809119514E-02 + 0.1803408197345540E-02 + 0.1800970319196096E-02 + 0.1798535171363401E-02 + 0.1796102750557794E-02 + 0.1793673053555543E-02 + 0.1791246077147885E-02 + 0.1788821818118165E-02 + 0.1786400273218232E-02 + 0.1783981439192099E-02 + 0.1781565312797462E-02 + 0.1779151890851892E-02 + 0.1776741170189317E-02 + 0.1774333147630272E-02 + 0.1771927819931002E-02 + 0.1769525183828513E-02 + 0.1767125236070113E-02 + 0.1764727973457272E-02 + 0.1762333392809224E-02 + 0.1759941490943347E-02 + 0.1757552264666268E-02 + 0.1755165710780746E-02 + 0.1752781826087885E-02 + 0.1750400607378268E-02 + 0.1748022051438373E-02 + 0.1745646155062080E-02 + 0.1743272915095237E-02 + 0.1740902328405892E-02 + 0.1738534391854505E-02 + 0.1736169102242146E-02 + 0.1733806456342242E-02 + 0.1731446450933980E-02 + 0.1729089082847058E-02 + 0.1726734348936785E-02 + 0.1724382246057493E-02 + 0.1722032771052360E-02 + 0.1719685920758427E-02 + 0.1717341692012213E-02 + 0.1715000081645481E-02 + 0.1712661086487166E-02 + 0.1710324703368628E-02 + 0.1707990929150356E-02 + 0.1705659760711787E-02 + 0.1703331194933543E-02 + 0.1701005228707430E-02 + 0.1698681858933180E-02 + 0.1696361082505896E-02 + 0.1694042896249748E-02 + 0.1691727296934588E-02 + 0.1689414281337924E-02 + 0.1687103846388752E-02 + 0.1684795989141740E-02 + 0.1682490706645267E-02 + 0.1680187995755156E-02 + 0.1677887853154140E-02 + 0.1675590275527121E-02 + 0.1673295259741234E-02 + 0.1671002802841082E-02 + 0.1668712901873884E-02 + 0.1666425553766823E-02 + 0.1664140755320464E-02 + 0.1661858503332696E-02 + 0.1659578794701124E-02 + 0.1657301626437304E-02 + 0.1655026995556531E-02 + 0.1652754898986821E-02 + 0.1650485333548136E-02 + 0.1648218296055300E-02 + 0.1645953783389726E-02 + 0.1643691792522219E-02 + 0.1641432320429713E-02 + 0.1639175364081519E-02 + 0.1636920920435860E-02 + 0.1634668986449590E-02 + 0.1632419559048528E-02 + 0.1630172635109431E-02 + 0.1627928211505348E-02 + 0.1625686285158982E-02 + 0.1623446853078246E-02 + 0.1621209912279242E-02 + 0.1618975459758767E-02 + 0.1616743492477612E-02 + 0.1614514007392379E-02 + 0.1612287001422583E-02 + 0.1610062471412523E-02 + 0.1607840414197862E-02 + 0.1605620826708419E-02 + 0.1603403706082091E-02 + 0.1601189049484328E-02 + 0.1598976853990776E-02 + 0.1596767116460735E-02 + 0.1594559833721662E-02 + 0.1592355002640607E-02 + 0.1590152620188772E-02 + 0.1587952683354290E-02 + 0.1585755189154129E-02 + 0.1583560134688136E-02 + 0.1581367517070945E-02 + 0.1579177333367649E-02 + 0.1576989580487617E-02 + 0.1574804255309688E-02 + 0.1572621354745524E-02 + 0.1570440875819712E-02 + 0.1568262815581140E-02 + 0.1566087171076339E-02 + 0.1563913939343011E-02 + 0.1561743117416756E-02 + 0.1559574702314340E-02 + 0.1557408690974610E-02 + 0.1555245080316252E-02 + 0.1553083867296845E-02 + 0.1550925049050455E-02 + 0.1548768622761169E-02 + 0.1546614585573456E-02 + 0.1544462934434592E-02 + 0.1542313666230634E-02 + 0.1540166777881292E-02 + 0.1538022266490216E-02 + 0.1535880129223560E-02 + 0.1533740363228481E-02 + 0.1531602965537745E-02 + 0.1529467933141621E-02 + 0.1527335263029607E-02 + 0.1525204952186566E-02 + 0.1523076997595488E-02 + 0.1520951396257142E-02 + 0.1518828145301838E-02 + 0.1516707241917190E-02 + 0.1514588683278267E-02 + 0.1512472466457163E-02 + 0.1510358588476346E-02 + 0.1508247046359818E-02 + 0.1506137837147952E-02 + 0.1504030957889718E-02 + 0.1501926405637664E-02 + 0.1499824177479006E-02 + 0.1497724270520710E-02 + 0.1495626681867650E-02 + 0.1493531408599128E-02 + 0.1491438447778621E-02 + 0.1489347796474781E-02 + 0.1487259451822910E-02 + 0.1485173411003109E-02 + 0.1483089671187902E-02 + 0.1481008229433583E-02 + 0.1478929082711718E-02 + 0.1476852228002087E-02 + 0.1474777662442448E-02 + 0.1472705383295428E-02 + 0.1470635387817509E-02 + 0.1468567673096357E-02 + 0.1466502236075036E-02 + 0.1464439073700972E-02 + 0.1462378183104214E-02 + 0.1460319561584320E-02 + 0.1458263206441482E-02 + 0.1456209114841850E-02 + 0.1454157283816778E-02 + 0.1452107710393548E-02 + 0.1450060391648896E-02 + 0.1448015324713443E-02 + 0.1445972506721420E-02 + 0.1443931934835348E-02 + 0.1441893606251115E-02 + 0.1439857518164859E-02 + 0.1437823667709830E-02 + 0.1435792051938853E-02 + 0.1433762667902313E-02 + 0.1431735512778426E-02 + 0.1429710583922692E-02 + 0.1427687878700345E-02 + 0.1425667394292590E-02 + 0.1423649127603761E-02 + 0.1421633075518162E-02 + 0.1419619235116525E-02 + 0.1417607603800334E-02 + 0.1415598178999083E-02 + 0.1413590958001385E-02 + 0.1411585937845891E-02 + 0.1409583115546296E-02 + 0.1407582488198814E-02 + 0.1405584053058897E-02 + 0.1403587807399772E-02 + 0.1401593748437343E-02 + 0.1399601873267169E-02 + 0.1397612178969985E-02 + 0.1395624662708699E-02 + 0.1393639321834169E-02 + 0.1391656153723180E-02 + 0.1389675155663166E-02 + 0.1387696324718622E-02 + 0.1385719657919936E-02 + 0.1383745152351974E-02 + 0.1381772805248073E-02 + 0.1379802613866623E-02 + 0.1377834575483898E-02 + 0.1375868687429439E-02 + 0.1373904947042652E-02 + 0.1371943351594565E-02 + 0.1369983898133271E-02 + 0.1368026583661508E-02 + 0.1366071405257161E-02 + 0.1364118360266583E-02 + 0.1362167446096049E-02 + 0.1360218660117827E-02 + 0.1358271999570999E-02 + 0.1356327461662063E-02 + 0.1354385043592000E-02 + 0.1352444742538157E-02 + 0.1350506555671537E-02 + 0.1348570480180935E-02 + 0.1346636513338905E-02 + 0.1344704652442647E-02 + 0.1342774894784474E-02 + 0.1340847237631507E-02 + 0.1338921678242747E-02 + 0.1336998213880267E-02 + 0.1335076841823517E-02 + 0.1333157559358070E-02 + 0.1331240363762444E-02 + 0.1329325252271091E-02 + 0.1327412222101498E-02 + 0.1325501270473936E-02 + 0.1323592394628088E-02 + 0.1321685591811777E-02 + 0.1319780859286293E-02 + 0.1317878194414702E-02 + 0.1315977594606688E-02 + 0.1314079057253932E-02 + 0.1312182579595457E-02 + 0.1310288158794162E-02 + 0.1308395792024221E-02 + 0.1306505476569492E-02 + 0.1304617209773334E-02 + 0.1302730988976963E-02 + 0.1300846811493398E-02 + 0.1298964674619045E-02 + 0.1297084575650565E-02 + 0.1295206511890044E-02 + 0.1293330480643052E-02 + 0.1291456479215645E-02 + 0.1289584504919495E-02 + 0.1287714555070174E-02 + 0.1285846626981484E-02 + 0.1283980717940287E-02 + 0.1282116825213178E-02 + 0.1280254946072299E-02 + 0.1278395077888769E-02 + 0.1276537218114507E-02 + 0.1274681364196377E-02 + 0.1272827513443044E-02 + 0.1270975663040897E-02 + 0.1269125810177921E-02 + 0.1267277952166201E-02 + 0.1265432086436761E-02 + 0.1263588210423580E-02 + 0.1261746321515598E-02 + 0.1259906417055003E-02 + 0.1258068494380467E-02 + 0.1256232550791902E-02 + 0.1254398583545633E-02 + 0.1252566589898513E-02 + 0.1250736567203986E-02 + 0.1248908512933215E-02 + 0.1247082424562832E-02 + 0.1245258299501930E-02 + 0.1243436135070368E-02 + 0.1241615928581914E-02 + 0.1239797677351440E-02 + 0.1237981378695430E-02 + 0.1236167029931411E-02 + 0.1234354628433519E-02 + 0.1232544171663889E-02 + 0.1230735657091422E-02 + 0.1228929082120646E-02 + 0.1227124444047435E-02 + 0.1225321740157699E-02 + 0.1223520967787700E-02 + 0.1221722124366056E-02 + 0.1219925207331285E-02 + 0.1218130214122825E-02 + 0.1216337142181967E-02 + 0.1214545988949959E-02 + 0.1212756751820384E-02 + 0.1210969428083259E-02 + 0.1209184015015236E-02 + 0.1207400509953854E-02 + 0.1205618910380885E-02 + 0.1203839213798925E-02 + 0.1202061417687275E-02 + 0.1200285519465001E-02 + 0.1198511516541556E-02 + 0.1196739406310399E-02 + 0.1194969186119882E-02 + 0.1193200853310458E-02 + 0.1191434405255410E-02 + 0.1189669839429413E-02 + 0.1187907153326647E-02 + 0.1186146344418757E-02 + 0.1184387410101151E-02 + 0.1182630347753142E-02 + 0.1180875154770255E-02 + 0.1179121828608094E-02 + 0.1177370366736178E-02 + 0.1175620766619048E-02 + 0.1173873025700940E-02 + 0.1172127141420953E-02 + 0.1170383111222883E-02 + 0.1168640932571494E-02 + 0.1166900602937378E-02 + 0.1165162119778174E-02 + 0.1163425480488218E-02 + 0.1161690682442540E-02 + 0.1159957723032743E-02 + 0.1158226599739376E-02 + 0.1156497310072707E-02 + 0.1154769851541422E-02 + 0.1153044221644848E-02 + 0.1151320417878892E-02 + 0.1149598437731745E-02 + 0.1147878278641548E-02 + 0.1146159938026495E-02 + 0.1144443413314485E-02 + 0.1142728702003109E-02 + 0.1141015801620270E-02 + 0.1139304709682426E-02 + 0.1137595423614844E-02 + 0.1135887940799577E-02 + 0.1134182258636613E-02 + 0.1132478374684693E-02 + 0.1130776286584438E-02 + 0.1129075991961992E-02 + 0.1127377488296701E-02 + 0.1125680772985577E-02 + 0.1123985843428775E-02 + 0.1122292697070102E-02 + 0.1120601331379947E-02 + 0.1118911743836751E-02 + 0.1117223932011242E-02 + 0.1115537893535178E-02 + 0.1113853626029434E-02 + 0.1112171126953389E-02 + 0.1110490393650540E-02 + 0.1108811423474508E-02 + 0.1107134213971394E-02 + 0.1105458762837049E-02 + 0.1103785067762812E-02 + 0.1102113126294084E-02 + 0.1100442935853217E-02 + 0.1098774493861764E-02 + 0.1097107797801195E-02 + 0.1095442845207728E-02 + 0.1093779633619980E-02 + 0.1092118160585196E-02 + 0.1090458423659168E-02 + 0.1088800420398482E-02 + 0.1087144148370862E-02 + 0.1085489605155979E-02 + 0.1083836788332447E-02 + 0.1082185695428273E-02 + 0.1080536323912677E-02 + 0.1078888671254125E-02 + 0.1077242735013055E-02 + 0.1075598512865710E-02 + 0.1073956002492709E-02 + 0.1072315201443793E-02 + 0.1070676107090050E-02 + 0.1069038716792861E-02 + 0.1067403028080544E-02 + 0.1065769038728601E-02 + 0.1064136746530592E-02 + 0.1062506149155133E-02 + 0.1060877244070047E-02 + 0.1059250028725374E-02 + 0.1057624500599666E-02 + 0.1056000657221256E-02 + 0.1054378496124128E-02 + 0.1052758014914998E-02 + 0.1051139211338530E-02 + 0.1049522083154123E-02 + 0.1047906628017764E-02 + 0.1046292843371964E-02 + 0.1044680726633208E-02 + 0.1043070275298560E-02 + 0.1041461487046315E-02 + 0.1039854359579387E-02 + 0.1038248890559615E-02 + 0.1036645077548108E-02 + 0.1035042918090873E-02 + 0.1033442409764440E-02 + 0.1031843550227105E-02 + 0.1030246337150672E-02 + 0.1028650768177609E-02 + 0.1027056840864468E-02 + 0.1025464552752182E-02 + 0.1023873901419305E-02 + 0.1022284884564912E-02 + 0.1020697499912147E-02 + 0.1019111745152531E-02 + 0.1017527617866616E-02 + 0.1015945115610641E-02 + 0.1014364235950255E-02 + 0.1012784976487334E-02 + 0.1011207334832468E-02 + 0.1009631308622324E-02 + 0.1008056895603553E-02 + 0.1006484093551786E-02 + 0.1004912900201925E-02 + 0.1003343313100549E-02 + 0.1001775329739835E-02 + 0.1000208947645493E-02 + 0.9986441645133592E-03 + 0.9970809780930868E-03 + 0.9955193861200584E-03 + 0.9939593862500546E-03 + 0.9924009761113126E-03 + 0.9908441533379595E-03 + 0.9892889156003950E-03 + 0.9877352605827372E-03 + 0.9861831859676098E-03 + 0.9846326894273423E-03 + 0.9830837686300180E-03 + 0.9815364212444136E-03 + 0.9799906449445825E-03 + 0.9784464374069430E-03 + 0.9769037963098651E-03 + 0.9753627193476572E-03 + 0.9738232042224315E-03 + 0.9722852486346827E-03 + 0.9707488502696821E-03 + 0.9692140068045870E-03 + 0.9676807159183232E-03 + 0.9661489753085153E-03 + 0.9646187826836265E-03 + 0.9630901357526120E-03 + 0.9615630322283314E-03 + 0.9600374698261236E-03 + 0.9585134462606659E-03 + 0.9569909592379077E-03 + 0.9554700064578178E-03 + 0.9539505856215572E-03 + 0.9524326944487278E-03 + 0.9509163306726137E-03 + 0.9494014920264283E-03 + 0.9478881762371925E-03 + 0.9463763810269594E-03 + 0.9448661041180099E-03 + 0.9433573432392793E-03 + 0.9418500961254892E-03 + 0.9403443605116316E-03 + 0.9388401341340529E-03 + 0.9373374147303903E-03 + 0.9358362000387007E-03 + 0.9343364878060791E-03 + 0.9328382757888253E-03 + 0.9313415617434306E-03 + 0.9298463434199061E-03 + 0.9283526185611104E-03 + 0.9268603849100243E-03 + 0.9253696402261134E-03 + 0.9238803822886155E-03 + 0.9223926088776302E-03 + 0.9209063177609391E-03 + 0.9194215066903162E-03 + 0.9179381734167780E-03 + 0.9164563157062400E-03 + 0.9149759313456103E-03 + 0.9134970181232937E-03 + 0.9120195738225824E-03 + 0.9105435962189469E-03 + 0.9090690830872795E-03 + 0.9075960322084534E-03 + 0.9061244413732904E-03 + 0.9046543083735799E-03 + 0.9031856310046303E-03 + 0.9017184070680944E-03 + 0.9002526343663117E-03 + 0.8987883107033184E-03 + 0.8973254338864978E-03 + 0.8958640017236014E-03 + 0.8944040120192229E-03 + 0.8929454625711850E-03 + 0.8914883511764828E-03 + 0.8900326756424338E-03 + 0.8885784338004006E-03 + 0.8871256234851472E-03 + 0.8856742425286152E-03 + 0.8842242887555685E-03 + 0.8827757599896613E-03 + 0.8813286540561066E-03 + 0.8798829687844965E-03 + 0.8784387020051716E-03 + 0.8769958515497532E-03 + 0.8755544152537471E-03 + 0.8741143909533925E-03 + 0.8726757764917924E-03 + 0.8712385697348260E-03 + 0.8698027685530963E-03 + 0.8683683708107049E-03 + 0.8669353743480551E-03 + 0.8655037770001616E-03 + 0.8640735766092838E-03 + 0.8626447710465545E-03 + 0.8612173581903210E-03 + 0.8597913359176491E-03 + 0.8583667021000188E-03 + 0.8569434546073873E-03 + 0.8555215913113429E-03 + 0.8541011100912678E-03 + 0.8526820088288838E-03 + 0.8512642854064655E-03 + 0.8498479377092160E-03 + 0.8484329636232888E-03 + 0.8470193610363763E-03 + 0.8456071278450489E-03 + 0.8441962619490694E-03 + 0.8427867612487866E-03 + 0.8413786236482954E-03 + 0.8399718470531658E-03 + 0.8385664293695335E-03 + 0.8371623685075317E-03 + 0.8357596623789988E-03 + 0.8343583088967726E-03 + 0.8329583059813123E-03 + 0.8315596515566321E-03 + 0.8301623435474593E-03 + 0.8287663798844367E-03 + 0.8273717585012092E-03 + 0.8259784773309619E-03 + 0.8245865343023006E-03 + 0.8231959273413116E-03 + 0.8218066543764087E-03 + 0.8204187133608965E-03 + 0.8190321022629965E-03 + 0.8176468190495569E-03 + 0.8162628616687890E-03 + 0.8148802280567793E-03 + 0.8134989161512923E-03 + 0.8121189239149805E-03 + 0.8107402493280604E-03 + 0.8093628903705019E-03 + 0.8079868450131254E-03 + 0.8066121112197319E-03 + 0.8052386869546680E-03 + 0.8038665701943623E-03 + 0.8024957589252825E-03 + 0.8011262511344729E-03 + 0.7997580448143316E-03 + 0.7983911379620672E-03 + 0.7970255285750461E-03 + 0.7956612146501714E-03 + 0.7942981941839040E-03 + 0.7929364651729540E-03 + 0.7915760256208894E-03 + 0.7902168735385027E-03 + 0.7888590069370373E-03 + 0.7875024238307770E-03 + 0.7861471222374801E-03 + 0.7847931001753754E-03 + 0.7834403556723788E-03 + 0.7820888867684248E-03 + 0.7807386915040860E-03 + 0.7793897679152533E-03 + 0.7780421140315221E-03 + 0.7766957278822318E-03 + 0.7753506075057295E-03 + 0.7740067509535002E-03 + 0.7726641562780911E-03 + 0.7713228215336143E-03 + 0.7699827447766595E-03 + 0.7686439240641358E-03 + 0.7673063574612891E-03 + 0.7659700430476733E-03 + 0.7646349789042017E-03 + 0.7633011631070241E-03 + 0.7619685937233939E-03 + 0.7606372688196696E-03 + 0.7593071864727339E-03 + 0.7579783447808354E-03 + 0.7566507418447923E-03 + 0.7553243757609305E-03 + 0.7539992446156408E-03 + 0.7526753464940271E-03 + 0.7513526794944846E-03 + 0.7500312417474562E-03 + 0.7487110313880990E-03 + 0.7473920465432488E-03 + 0.7460742853178487E-03 + 0.7447577458132859E-03 + 0.7434424261405049E-03 + 0.7421283244379295E-03 + 0.7408154388488999E-03 + 0.7395037675157622E-03 + 0.7381933085777553E-03 + 0.7368840601735074E-03 + 0.7355760204455032E-03 + 0.7342691875494928E-03 + 0.7329635596440851E-03 + 0.7316591348898283E-03 + 0.7303559114546109E-03 + 0.7290538875080463E-03 + 0.7277530612198548E-03 + 0.7264534307601945E-03 + 0.7251549942993419E-03 + 0.7238577500118838E-03 + 0.7225616960920047E-03 + 0.7212668307394464E-03 + 0.7199731521525264E-03 + 0.7186806585224303E-03 + 0.7173893480381298E-03 + 0.7160992188928245E-03 + 0.7148102693027944E-03 + 0.7135224974921739E-03 + 0.7122359016850412E-03 + 0.7109504801051023E-03 + 0.7096662309759234E-03 + 0.7083831525220651E-03 + 0.7071012429746539E-03 + 0.7058205005674898E-03 + 0.7045409235364806E-03 + 0.7032625101328922E-03 + 0.7019852586147870E-03 + 0.7007091672402911E-03 + 0.6994342342677555E-03 + 0.6981604579556433E-03 + 0.6968878365636021E-03 + 0.6956163683618463E-03 + 0.6943460516261276E-03 + 0.6930768846332416E-03 + 0.6918088656698105E-03 + 0.6905419930280688E-03 + 0.6892762650004647E-03 + 0.6880116798811327E-03 + 0.6867482359652588E-03 + 0.6854859315497230E-03 + 0.6842247649521004E-03 + 0.6829647345038942E-03 + 0.6817058385360795E-03 + 0.6804480753687235E-03 + 0.6791914433139321E-03 + 0.6779359406850933E-03 + 0.6766815658183905E-03 + 0.6754283170680367E-03 + 0.6741761927887263E-03 + 0.6729251913349468E-03 + 0.6716753110610091E-03 + 0.6704265503217933E-03 + 0.6691789074838489E-03 + 0.6679323809245514E-03 + 0.6666869690215439E-03 + 0.6654426701489675E-03 + 0.6641994826774475E-03 + 0.6629574049782805E-03 + 0.6617164354451831E-03 + 0.6604765724962849E-03 + 0.6592378145507349E-03 + 0.6580001600207394E-03 + 0.6567636073103056E-03 + 0.6555281548233682E-03 + 0.6542938009789166E-03 + 0.6530605442152188E-03 + 0.6518283829718080E-03 + 0.6505973156886961E-03 + 0.6493673408065583E-03 + 0.6481384567662863E-03 + 0.6469106620177788E-03 + 0.6456839550245068E-03 + 0.6444583342511177E-03 + 0.6432337981662308E-03 + 0.6420103452449400E-03 + 0.6407879739630074E-03 + 0.6395666828022383E-03 + 0.6383464702551660E-03 + 0.6371273348154924E-03 + 0.6359092749848038E-03 + 0.6346922892799029E-03 + 0.6334763762193151E-03 + 0.6322615343186588E-03 + 0.6310477620874550E-03 + 0.6298350580345281E-03 + 0.6286234206845730E-03 + 0.6274128485986280E-03 + 0.6262033403427754E-03 + 0.6249948944765057E-03 + 0.6237875095428301E-03 + 0.6225811840822510E-03 + 0.6213759166460354E-03 + 0.6201717058148358E-03 + 0.6189685501742593E-03 + 0.6177664483137878E-03 + 0.6165653988344442E-03 + 0.6153654003394003E-03 + 0.6141664514302771E-03 + 0.6129685507036774E-03 + 0.6117716967551758E-03 + 0.6105758881907610E-03 + 0.6093811236536007E-03 + 0.6081874017951740E-03 + 0.6069947212632116E-03 + 0.6058030806907665E-03 + 0.6046124787072895E-03 + 0.6034229139505650E-03 + 0.6022343850941900E-03 + 0.6010468908213723E-03 + 0.5998604298154627E-03 + 0.5986750007604615E-03 + 0.5974906023405736E-03 + 0.5963072332408824E-03 + 0.5951248921510555E-03 + 0.5939435777622343E-03 + 0.5927632887721837E-03 + 0.5915840239162343E-03 + 0.5904057819429626E-03 + 0.5892285615987634E-03 + 0.5880523616163298E-03 + 0.5868771807230716E-03 + 0.5857030176509253E-03 + 0.5845298711630088E-03 + 0.5833577400355548E-03 + 0.5821866230446799E-03 + 0.5810165189653289E-03 + 0.5798474265719059E-03 + 0.5786793446421159E-03 + 0.5775122719812943E-03 + 0.5763462074085655E-03 + 0.5751811497428372E-03 + 0.5740170977999942E-03 + 0.5728540503942852E-03 + 0.5716920063422206E-03 + 0.5705309644838109E-03 + 0.5693709236729290E-03 + 0.5682118827645342E-03 + 0.5670538406240301E-03 + 0.5658967961235163E-03 + 0.5647407481359297E-03 + 0.5635856955436644E-03 + 0.5624316372356843E-03 + 0.5612785721019171E-03 + 0.5601264990442594E-03 + 0.5589754169736334E-03 + 0.5578253248019589E-03 + 0.5566762214539117E-03 + 0.5555281058645792E-03 + 0.5543809769702211E-03 + 0.5532348337232639E-03 + 0.5520896750904384E-03 + 0.5509455000389546E-03 + 0.5498023075356794E-03 + 0.5486600965471569E-03 + 0.5475188660410025E-03 + 0.5463786150117040E-03 + 0.5452393424816683E-03 + 0.5441010474744119E-03 + 0.5429637290078244E-03 + 0.5418273860934701E-03 + 0.5406920177433032E-03 + 0.5395576229939923E-03 + 0.5384242009123401E-03 + 0.5372917505669653E-03 + 0.5361602710258248E-03 + 0.5350297613560125E-03 + 0.5339002206248388E-03 + 0.5327716479133477E-03 + 0.5316440423222603E-03 + 0.5305174029540265E-03 + 0.5293917289233525E-03 + 0.5282670193640202E-03 + 0.5271432734114885E-03 + 0.5260204902027642E-03 + 0.5248986688774965E-03 + 0.5237778085757691E-03 + 0.5226579084563159E-03 + 0.5215389677120751E-03 + 0.5204209855396210E-03 + 0.5193039611306629E-03 + 0.5181878936672071E-03 + 0.5170727823302070E-03 + 0.5159586263211123E-03 + 0.5148454248859146E-03 + 0.5137331772764564E-03 + 0.5126218827419936E-03 + 0.5115115405256825E-03 + 0.5104021498698205E-03 + 0.5092937100300864E-03 + 0.5081862202967518E-03 + 0.5070796799656126E-03 + 0.5059740883350154E-03 + 0.5048694447105171E-03 + 0.5037657483989398E-03 + 0.5026629987138730E-03 + 0.5015611949897996E-03 + 0.5004603365652313E-03 + 0.4993604227854728E-03 + 0.4982614530188198E-03 + 0.4971634266384334E-03 + 0.4960663430217268E-03 + 0.4949702015619085E-03 + 0.4938750016558455E-03 + 0.4927807427039166E-03 + 0.4916874241207515E-03 + 0.4905950453246052E-03 + 0.4895036057399427E-03 + 0.4884131048189293E-03 + 0.4873235420214422E-03 + 0.4862349168111060E-03 + 0.4851472286698653E-03 + 0.4840604770852615E-03 + 0.4829746615473034E-03 + 0.4818897815592634E-03 + 0.4808058366288440E-03 + 0.4797228262684541E-03 + 0.4786407500182096E-03 + 0.4775596074283507E-03 + 0.4764793980516339E-03 + 0.4754001214570109E-03 + 0.4743217772198980E-03 + 0.4732443649183172E-03 + 0.4721678841487929E-03 + 0.4710923345159021E-03 + 0.4700177156266695E-03 + 0.4689440271071648E-03 + 0.4678712685924963E-03 + 0.4667994397208070E-03 + 0.4657285401563057E-03 + 0.4646585695766541E-03 + 0.4635895276605285E-03 + 0.4625214140952968E-03 + 0.4614542285732092E-03 + 0.4603879707892869E-03 + 0.4593226404678613E-03 + 0.4582582373511285E-03 + 0.4571947611825788E-03 + 0.4561322117182117E-03 + 0.4550705887223113E-03 + 0.4540098919607150E-03 + 0.4529501212182717E-03 + 0.4518912762934969E-03 + 0.4508333569864109E-03 + 0.4497763631155356E-03 + 0.4487202945137855E-03 + 0.4476651510157604E-03 + 0.4466109324784640E-03 + 0.4455576387778114E-03 + 0.4445052697905166E-03 + 0.4434538253974065E-03 + 0.4424033054830648E-03 + 0.4413537099338046E-03 + 0.4403050386719593E-03 + 0.4392572916555465E-03 + 0.4382104688440057E-03 + 0.4371645701941256E-03 + 0.4361195956598471E-03 + 0.4350755451957816E-03 + 0.4340324187812692E-03 + 0.4329902164243950E-03 + 0.4319489381353363E-03 + 0.4309085839414979E-03 + 0.4298691538919899E-03 + 0.4288306480374711E-03 + 0.4277930664358546E-03 + 0.4267564091549492E-03 + 0.4257206762637050E-03 + 0.4246858678537900E-03 + 0.4236519840505365E-03 + 0.4226190249820069E-03 + 0.4215869907771735E-03 + 0.4205558815664680E-03 + 0.4195256974807863E-03 + 0.4184964386787242E-03 + 0.4174681053672678E-03 + 0.4164406977582598E-03 + 0.4154142160621481E-03 + 0.4143886604867171E-03 + 0.4133640312395853E-03 + 0.4123403285480517E-03 + 0.4113175526800793E-03 + 0.4102957039086902E-03 + 0.4092747825132380E-03 + 0.4082547887873226E-03 + 0.4072357230265251E-03 + 0.4062175855364202E-03 + 0.4052003766471218E-03 + 0.4041840966924742E-03 + 0.4031687460212109E-03 + 0.4021543250220178E-03 + 0.4011408340901936E-03 + 0.4001282736201453E-03 + 0.3991166440036288E-03 + 0.3981059456319283E-03 + 0.3970961789136429E-03 + 0.3960873443128887E-03 + 0.3950794423048751E-03 + 0.3940724733673087E-03 + 0.3930664379866328E-03 + 0.3920613366512177E-03 + 0.3910571698556387E-03 + 0.3900539381184013E-03 + 0.3890516419637618E-03 + 0.3880502819252693E-03 + 0.3870498585756604E-03 + 0.3860503724980096E-03 + 0.3850518242797813E-03 + 0.3840542145287792E-03 + 0.3830575438586727E-03 + 0.3820618128876049E-03 + 0.3810670222563945E-03 + 0.3800731726130457E-03 + 0.3790802646111607E-03 + 0.3780882989355412E-03 + 0.3770972762818006E-03 + 0.3761071973491404E-03 + 0.3751180628587141E-03 + 0.3741298735399825E-03 + 0.3731426301275558E-03 + 0.3721563333906239E-03 + 0.3711709841126708E-03 + 0.3701865830797778E-03 + 0.3692031310970234E-03 + 0.3682206289780381E-03 + 0.3672390775395776E-03 + 0.3662584776237159E-03 + 0.3652788300849572E-03 + 0.3643001357807725E-03 + 0.3633223955948956E-03 + 0.3623456104250797E-03 + 0.3613697811718274E-03 + 0.3603949087620472E-03 + 0.3594209941379743E-03 + 0.3584480382439475E-03 + 0.3574760420458142E-03 + 0.3565050065229825E-03 + 0.3555349326570278E-03 + 0.3545658214541677E-03 + 0.3535976739374741E-03 + 0.3526304911321327E-03 + 0.3516642740886567E-03 + 0.3506990238763402E-03 + 0.3497347415658989E-03 + 0.3487714282436671E-03 + 0.3478090850085376E-03 + 0.3468477129612029E-03 + 0.3458873132285109E-03 + 0.3449278869601085E-03 + 0.3439694353074962E-03 + 0.3430119594448742E-03 + 0.3420554605678673E-03 + 0.3410999398733999E-03 + 0.3401453985694202E-03 + 0.3391918378751590E-03 + 0.3382392590115974E-03 + 0.3372876632344165E-03 + 0.3363370518377526E-03 + 0.3353874261176614E-03 + 0.3344387873677981E-03 + 0.3334911368789314E-03 + 0.3325444759426893E-03 + 0.3315988058907129E-03 + 0.3306541281067227E-03 + 0.3297104439778082E-03 + 0.3287677548853517E-03 + 0.3278260622026829E-03 + 0.3268853673031047E-03 + 0.3259456715937862E-03 + 0.3250069765337304E-03 + 0.3240692835864147E-03 + 0.3231325942217565E-03 + 0.3221969099203741E-03 + 0.3212622321640065E-03 + 0.3203285624444901E-03 + 0.3193959022718933E-03 + 0.3184642531583895E-03 + 0.3175336166398610E-03 + 0.3166039942987550E-03 + 0.3156753877229579E-03 + 0.3147477985035703E-03 + 0.3138212282385495E-03 + 0.3128956785267923E-03 + 0.3119711509815652E-03 + 0.3110476472496105E-03 + 0.3101251689824501E-03 + 0.3092037178410012E-03 + 0.3082832955100766E-03 + 0.3073639036782505E-03 + 0.3064455440476668E-03 + 0.3055282183581649E-03 + 0.3046119283560745E-03 + 0.3036966757903417E-03 + 0.3027824624178408E-03 + 0.3018692899969502E-03 + 0.3009571602993031E-03 + 0.3000460751405996E-03 + 0.2991360363456910E-03 + 0.2982270457437775E-03 + 0.2973191051799208E-03 + 0.2964122165027922E-03 + 0.2955063815700404E-03 + 0.2946016022751632E-03 + 0.2936978805206114E-03 + 0.2927952182118301E-03 + 0.2918936172673966E-03 + 0.2909930796094796E-03 + 0.2900936071687190E-03 + 0.2891952019164112E-03 + 0.2882978658360464E-03 + 0.2874016009130142E-03 + 0.2865064091427175E-03 + 0.2856122925238400E-03 + 0.2847192530631732E-03 + 0.2838272928144238E-03 + 0.2829364138481464E-03 + 0.2820466182348138E-03 + 0.2811579080442672E-03 + 0.2802702853460981E-03 + 0.2793837522154681E-03 + 0.2784983107665668E-03 + 0.2776139631302872E-03 + 0.2767307114404737E-03 + 0.2758485578533310E-03 + 0.2749675045354855E-03 + 0.2740875536559782E-03 + 0.2732087074039986E-03 + 0.2723309679789655E-03 + 0.2714543375820898E-03 + 0.2705788184308163E-03 + 0.2697044127515593E-03 + 0.2688311227737806E-03 + 0.2679589507581560E-03 + 0.2670878989840857E-03 + 0.2662179697321535E-03 + 0.2653491652938373E-03 + 0.2644814879677140E-03 + 0.2636149400542984E-03 + 0.2627495238780961E-03 + 0.2618852417805595E-03 + 0.2610220961043747E-03 + 0.2601600892052006E-03 + 0.2592992234486507E-03 + 0.2584395012022815E-03 + 0.2575809248621988E-03 + 0.2567234968482114E-03 + 0.2558672195807046E-03 + 0.2550120954772242E-03 + 0.2541581269527651E-03 + 0.2533053164239020E-03 + 0.2524536663438932E-03 + 0.2516031792017612E-03 + 0.2507538574877110E-03 + 0.2499057036842205E-03 + 0.2490587202656058E-03 + 0.2482129097069481E-03 + 0.2473682745176684E-03 + 0.2465248172464851E-03 + 0.2456825404441362E-03 + 0.2448414466566723E-03 + 0.2440015384243297E-03 + 0.2431628182875017E-03 + 0.2423252888082013E-03 + 0.2414889525775124E-03 + 0.2406538121886642E-03 + 0.2398198702401073E-03 + 0.2389871293378956E-03 + 0.2381555920888120E-03 + 0.2373252611076590E-03 + 0.2364961390219337E-03 + 0.2356682284604633E-03 + 0.2348415320691473E-03 + 0.2340160525232236E-03 + 0.2331917925008046E-03 + 0.2323687546785564E-03 + 0.2315469417304415E-03 + 0.2307263563302003E-03 + 0.2299070011616112E-03 + 0.2290888789288570E-03 + 0.2282719923386269E-03 + 0.2274563441042662E-03 + 0.2266419369538368E-03 + 0.2258287736173958E-03 + 0.2250168568314617E-03 + 0.2242061893481424E-03 + 0.2233967739218553E-03 + 0.2225886133090904E-03 + 0.2217817102718179E-03 + 0.2209760675729006E-03 + 0.2201716879815860E-03 + 0.2193685742855079E-03 + 0.2185667292755844E-03 + 0.2177661557445504E-03 + 0.2169668564908309E-03 + 0.2161688343139709E-03 + 0.2153720920180746E-03 + 0.2145766324229534E-03 + 0.2137824583518028E-03 + 0.2129895726286212E-03 + 0.2121979780804323E-03 + 0.2114076775349720E-03 + 0.2106186738236541E-03 + 0.2098309697931191E-03 + 0.2090445682939597E-03 + 0.2082594721784934E-03 + 0.2074756843069001E-03 + 0.2066932075415894E-03 + 0.2059120447442470E-03 + 0.2051321987729341E-03 + 0.2043536724845819E-03 + 0.2035764687399193E-03 + 0.2028005904204516E-03 + 0.2020260404147549E-03 + 0.2012528216099688E-03 + 0.2004809368845582E-03 + 0.1997103891137607E-03 + 0.1989411811749173E-03 + 0.1981733159593238E-03 + 0.1974067963639488E-03 + 0.1966416252849945E-03 + 0.1958778056129829E-03 + 0.1951153402359179E-03 + 0.1943542320428913E-03 + 0.1935944839318141E-03 + 0.1928360988048565E-03 + 0.1920790795638927E-03 + 0.1913234291079269E-03 + 0.1905691503344506E-03 + 0.1898162461412242E-03 + 0.1890647194287888E-03 + 0.1883145730992776E-03 + 0.1875658100541024E-03 + 0.1868184331865596E-03 + 0.1860724453849106E-03 + 0.1853278495377159E-03 + 0.1845846485380993E-03 + 0.1838428452822591E-03 + 0.1831024426665829E-03 + 0.1823634435892358E-03 + 0.1816258509496843E-03 + 0.1808896676459716E-03 + 0.1801548965534576E-03 + 0.1794215405295468E-03 + 0.1786896024322537E-03 + 0.1779590851390334E-03 + 0.1772299915440218E-03 + 0.1765023245408205E-03 + 0.1757760870012825E-03 + 0.1750512817770462E-03 + 0.1743279117191531E-03 + 0.1736059796825230E-03 + 0.1728854885259862E-03 + 0.1721664411080044E-03 + 0.1714488402724646E-03 + 0.1707326888473483E-03 + 0.1700179896596933E-03 + 0.1693047455320837E-03 + 0.1685929592818439E-03 + 0.1678826337260784E-03 + 0.1671737716851527E-03 + 0.1664663759836139E-03 + 0.1657604494457166E-03 + 0.1650559948701929E-03 + 0.1643530150203275E-03 + 0.1636515126568746E-03 + 0.1629514905449949E-03 + 0.1622529514565020E-03 + 0.1615558981636243E-03 + 0.1608603334294114E-03 + 0.1601662600018845E-03 + 0.1594736806275352E-03 + 0.1587825980400274E-03 + 0.1580930149502357E-03 + 0.1574049340666470E-03 + 0.1567183580927390E-03 + 0.1560332897223021E-03 + 0.1553497316479770E-03 + 0.1546676865541438E-03 + 0.1539871571078346E-03 + 0.1533081459738353E-03 + 0.1526306558044296E-03 + 0.1519546892232512E-03 + 0.1512802488499345E-03 + 0.1506073373023420E-03 + 0.1499359571938960E-03 + 0.1492661111373183E-03 + 0.1485978017318421E-03 + 0.1479310315398992E-03 + 0.1472658031176933E-03 + 0.1466021190157842E-03 + 0.1459399817678867E-03 + 0.1452793939045893E-03 + 0.1446203579493861E-03 + 0.1439628764026136E-03 + 0.1433069517598869E-03 + 0.1426525865075202E-03 + 0.1419997830985363E-03 + 0.1413485439785168E-03 + 0.1406988715890414E-03 + 0.1400507683560007E-03 + 0.1394042367014358E-03 + 0.1387592790363369E-03 + 0.1381158977241701E-03 + 0.1374740951156292E-03 + 0.1368338735593838E-03 + 0.1361952353945576E-03 + 0.1355581829574665E-03 + 0.1349227185761216E-03 + 0.1342888445355779E-03 + 0.1336565631070356E-03 + 0.1330258765561149E-03 + 0.1323967871167437E-03 + 0.1317692970116712E-03 + 0.1311434084592024E-03 + 0.1305191236499605E-03 + 0.1298964447638943E-03 + 0.1292753739753197E-03 + 0.1286559134199493E-03 + 0.1280380652172596E-03 + 0.1274218314834846E-03 + 0.1268072143107086E-03 + 0.1261942157799394E-03 + 0.1255828379657082E-03 + 0.1249730828886781E-03 + 0.1243649525426163E-03 + 0.1237584489196917E-03 + 0.1231535739990737E-03 + 0.1225503297528663E-03 + 0.1219487181482418E-03 + 0.1213487411021388E-03 + 0.1207504005018434E-03 + 0.1201536982318880E-03 + 0.1195586361494967E-03 + 0.1189652160943932E-03 + 0.1183734399029814E-03 + 0.1177833093725709E-03 + 0.1171948262732800E-03 + 0.1166079923723949E-03 + 0.1160228094040541E-03 + 0.1154392790773975E-03 + 0.1148574030985826E-03 + 0.1142771831349031E-03 + 0.1136986208218791E-03 + 0.1131217177926636E-03 + 0.1125464756536433E-03 + 0.1119728959874901E-03 + 0.1114009803741902E-03 + 0.1108307303538649E-03 + 0.1102621474283730E-03 + 0.1096952330966284E-03 + 0.1091299888228931E-03 + 0.1085664160353963E-03 + 0.1080045161598410E-03 + 0.1074442905973929E-03 + 0.1068857407215871E-03 + 0.1063288679032612E-03 + 0.1057736734718494E-03 + 0.1052201587062409E-03 + 0.1046683248816861E-03 + 0.1041181732503496E-03 + 0.1035697050338508E-03 + 0.1030229214510125E-03 + 0.1024778236863260E-03 + 0.1019344128750224E-03 + 0.1013926901480515E-03 + 0.1008526566073947E-03 + 0.1003143133099374E-03 + 0.9977766130833249E-04 + 0.9924270163000594E-04 + 0.9870943525972955E-04 + 0.9817786317787936E-04 + 0.9764798633694614E-04 + 0.9711980563819557E-04 + 0.9659332197720701E-04 + 0.9606853622436594E-04 + 0.9554544919971564E-04 + 0.9502406171718574E-04 + 0.9450437456709842E-04 + 0.9398638848840690E-04 + 0.9347010421323462E-04 + 0.9295552245099191E-04 + 0.9244264385722513E-04 + 0.9193146907962449E-04 + 0.9142199874473768E-04 + 0.9091423342438636E-04 + 0.9040817368163124E-04 + 0.8990382005924440E-04 + 0.8940117304261774E-04 + 0.8890023310706468E-04 + 0.8840100070957933E-04 + 0.8790347625050096E-04 + 0.8740766011924210E-04 + 0.8691355268838425E-04 + 0.8642115427348383E-04 + 0.8593046517803458E-04 + 0.8544148568863474E-04 + 0.8495421602915245E-04 + 0.8446865640890332E-04 + 0.8398480702366021E-04 + 0.8350266801407312E-04 + 0.8302223950676913E-04 + 0.8254352161396136E-04 + 0.8206651438353614E-04 + 0.8159121784544318E-04 + 0.8111763201790080E-04 + 0.8064575686170711E-04 + 0.8017559232012175E-04 + 0.7970713832498553E-04 + 0.7924039474682807E-04 + 0.7877536143567657E-04 + 0.7831203823138111E-04 + 0.7785042491379111E-04 + 0.7739052124082035E-04 + 0.7693232696121632E-04 + 0.7647584176442774E-04 + 0.7602106531622226E-04 + 0.7556799727405377E-04 + 0.7511663723633799E-04 + 0.7466698477577514E-04 + 0.7421903945756815E-04 + 0.7377280078854986E-04 + 0.7332826824785288E-04 + 0.7288544130794784E-04 + 0.7244431938457287E-04 + 0.7200490186415898E-04 + 0.7156718812698871E-04 + 0.7113117749609119E-04 + 0.7069686926233919E-04 + 0.7026426271129766E-04 + 0.6983335707512381E-04 + 0.6940415155338251E-04 + 0.6897664534059748E-04 + 0.6855083757613455E-04 + 0.6812672736282623E-04 + 0.6770431379908308E-04 + 0.6728359593239384E-04 + 0.6686457277365553E-04 + 0.6644724332961700E-04 + 0.6603160655601080E-04 + 0.6561766136882524E-04 + 0.6520540668017079E-04 + 0.6479484135333982E-04 + 0.6438596421039975E-04 + 0.6397877406976500E-04 + 0.6357326970338360E-04 + 0.6316944984068787E-04 + 0.6276731320753290E-04 + 0.6236685848423521E-04 + 0.6196808430597585E-04 + 0.6157098930436106E-04 + 0.6117557206787639E-04 + 0.6078183113870603E-04 + 0.6038976505542514E-04 + 0.5999937231574197E-04 + 0.5961065136982501E-04 + 0.5922360066408726E-04 + 0.5883821860563446E-04 + 0.5845450355201559E-04 + 0.5807245385677501E-04 + 0.5769206783678439E-04 + 0.5731334375878868E-04 + 0.5693627988524977E-04 + 0.5656087444289538E-04 + 0.5618712560547365E-04 + 0.5581503154197059E-04 + 0.5544459038959233E-04 + 0.5507580023441536E-04 + 0.5470865915751785E-04 + 0.5434316520824969E-04 + 0.5397931638050586E-04 + 0.5361711066234529E-04 + 0.5325654601399109E-04 + 0.5289762034277254E-04 + 0.5254033154992301E-04 + 0.5218467750915057E-04 + 0.5183065603724791E-04 + 0.5147826494385286E-04 + 0.5112750201467648E-04 + 0.5077836498154621E-04 + 0.5043085156885303E-04 + 0.5008495947779896E-04 + 0.4974068635263365E-04 + 0.4939802982898519E-04 + 0.4905698752178253E-04 + 0.4871755699043753E-04 + 0.4837973578513721E-04 + 0.4804352143714863E-04 + 0.4770891142227725E-04 + 0.4737590320621043E-04 + 0.4704449423707395E-04 + 0.4671468190665652E-04 + 0.4638646359546920E-04 + 0.4605983666864388E-04 + 0.4573479843726657E-04 + 0.4541134620055972E-04 + 0.4508947724333955E-04 + 0.4476918879493873E-04 + 0.4445047807133237E-04 + 0.4413334227598215E-04 + 0.4381777855949559E-04 + 0.4350378405853091E-04 + 0.4319135589824898E-04 + 0.4288049115056898E-04 + 0.4257118687200650E-04 + 0.4226344010913544E-04 + 0.4195724785802209E-04 + 0.4165260709873089E-04 + 0.4134951480222403E-04 + 0.4104796788872019E-04 + 0.4074796326084778E-04 + 0.4044949781328882E-04 + 0.4015256839209407E-04 + 0.3985717182489124E-04 + 0.3956330493235821E-04 + 0.3927096448849055E-04 + 0.3898014724797935E-04 + 0.3869084995928871E-04 + 0.3840306932500365E-04 + 0.3811680202701973E-04 + 0.3783204474194465E-04 + 0.3754879410372740E-04 + 0.3726704672536910E-04 + 0.3698679921494978E-04 + 0.3670804813706558E-04 + 0.3643079003307865E-04 + 0.3615502144035255E-04 + 0.3588073885799740E-04 + 0.3560793876290902E-04 + 0.3533661762828283E-04 + 0.3506677188868727E-04 + 0.3479839795432652E-04 + 0.3453149223212959E-04 + 0.3426605109251442E-04 + 0.3400207088091073E-04 + 0.3373954793996933E-04 + 0.3347847857983259E-04 + 0.3321885908650980E-04 + 0.3296068574334032E-04 + 0.3270395480005448E-04 + 0.3244866247933615E-04 + 0.3219480500149812E-04 + 0.3194237855764057E-04 + 0.3169137931339251E-04 + 0.3144180343217645E-04 + 0.3119364704929319E-04 + 0.3094690627346937E-04 + 0.3070157721130491E-04 + 0.3045765594332337E-04 + 0.3021513852336003E-04 + 0.2997402100318599E-04 + 0.2973429941076070E-04 + 0.2949596974763673E-04 + 0.2925902801327896E-04 + 0.2902347018363391E-04 + 0.2878929220639514E-04 + 0.2855649002709843E-04 + 0.2832505957239885E-04 + 0.2809499674436124E-04 + 0.2786629744298351E-04 + 0.2763895754854108E-04 + 0.2741297291345667E-04 + 0.2718833938776064E-04 + 0.2696505280468839E-04 + 0.2674310897174500E-04 + 0.2652250369404641E-04 + 0.2630323276129932E-04 + 0.2608529193758016E-04 + 0.2586867698439963E-04 + 0.2565338364959413E-04 + 0.2543940765628999E-04 + 0.2522674472491234E-04 + 0.2501539056281766E-04 + 0.2480534085167450E-04 + 0.2459659127009965E-04 + 0.2438913748647272E-04 + 0.2418297514727203E-04 + 0.2397809989611182E-04 + 0.2377450736626745E-04 + 0.2357219316690570E-04 + 0.2337115290374538E-04 + 0.2317138217409557E-04 + 0.2297287655387968E-04 + 0.2277563161565997E-04 + 0.2257964292447841E-04 + 0.2238490602447683E-04 + 0.2219141645619171E-04 + 0.2199916975354259E-04 + 0.2180816143033471E-04 + 0.2161838699656582E-04 + 0.2142984195688142E-04 + 0.2124252179812429E-04 + 0.2105642200343715E-04 + 0.2087153805085007E-04 + 0.2068786539974835E-04 + 0.2050539950526995E-04 + 0.2032413581911281E-04 + 0.2014406977922547E-04 + 0.1996519682012152E-04 + 0.1978751237214572E-04 + 0.1961101184737064E-04 + 0.1943569065286413E-04 + 0.1926154419376308E-04 + 0.1908856786591592E-04 + 0.1891675706238539E-04 + 0.1874610717319890E-04 + 0.1857661357237953E-04 + 0.1840827162869151E-04 + 0.1824107670958396E-04 + 0.1807502417490277E-04 + 0.1791010938176294E-04 + 0.1774632768550665E-04 + 0.1758367443020790E-04 + 0.1742214495551783E-04 + 0.1726173460006721E-04 + 0.1710243869539291E-04 + 0.1694425256999459E-04 + 0.1678717155145506E-04 + 0.1663119096034928E-04 + 0.1647630611398046E-04 + 0.1632251232901019E-04 + 0.1616980491676021E-04 + 0.1601817918583933E-04 + 0.1586763044433542E-04 + 0.1571815399559244E-04 + 0.1556974514033395E-04 + 0.1542239917909712E-04 + 0.1527611141075020E-04 + 0.1513087713315906E-04 + 0.1498669164385626E-04 + 0.1484355023659687E-04 + 0.1470144820267439E-04 + 0.1456038083339161E-04 + 0.1442034342073447E-04 + 0.1428133125717091E-04 + 0.1414333963508430E-04 + 0.1400636384544563E-04 + 0.1387039917814362E-04 + 0.1373544092319159E-04 + 0.1360148437317795E-04 + 0.1346852482283098E-04 + 0.1333655756694800E-04 + 0.1320557790039105E-04 + 0.1307558111808122E-04 + 0.1294656251510633E-04 + 0.1281851739018341E-04 + 0.1269144104556920E-04 + 0.1256532878378815E-04 + 0.1244017591043422E-04 + 0.1231597773434454E-04 + 0.1219272956461868E-04 + 0.1207042671353133E-04 + 0.1194906449699317E-04 + 0.1182863823126415E-04 + 0.1170914323787173E-04 + 0.1159057484487994E-04 + 0.1147292838083906E-04 + 0.1135619917758577E-04 + 0.1124038257138009E-04 + 0.1112547389892633E-04 + 0.1101146850377176E-04 + 0.1089836173944459E-04 + 0.1078614896031658E-04 + 0.1067482552414853E-04 + 0.1056438679406807E-04 + 0.1045482813376523E-04 + 0.1034614491401459E-04 + 0.1023833251777346E-04 + 0.1013138632924730E-04 + 0.1002530173749540E-04 + 0.9920074140648104E-05 + 0.9815698937872257E-05 + 0.9712171534294434E-05 + 0.9609487347160485E-05 + 0.9507641795215420E-05 + 0.9406630302965656E-05 + 0.9306448307672955E-05 + 0.9207091248328958E-05 + 0.9108554569588787E-05 + 0.9010833729783570E-05 + 0.8913924189277722E-05 + 0.8817821414067462E-05 + 0.8722520884990585E-05 + 0.8628018085307010E-05 + 0.8534308503758194E-05 + 0.8441387644874727E-05 + 0.8349251016014883E-05 + 0.8257894129844495E-05 + 0.8167312515754183E-05 + 0.8077501706421773E-05 + 0.7988457239597599E-05 + 0.7900174670540540E-05 + 0.7812649558283638E-05 + 0.7725877466773435E-05 + 0.7639853978543778E-05 + 0.7554574680522385E-05 + 0.7470035164211514E-05 + 0.7386231040085203E-05 + 0.7303157923535590E-05 + 0.7220811434345691E-05 + 0.7139187212269238E-05 + 0.7058280902734015E-05 + 0.6978088155241890E-05 + 0.6898604639615858E-05 + 0.6819826032003682E-05 + 0.6741748012391813E-05 + 0.6664366281780186E-05 + 0.6587676548325337E-05 + 0.6511674523712399E-05 + 0.6436355940826203E-05 + 0.6361716540444682E-05 + 0.6287752066657440E-05 + 0.6214458285397580E-05 + 0.6141830971477990E-05 + 0.6069865902719291E-05 + 0.5998558878705671E-05 + 0.5927905708670362E-05 + 0.5857902204629292E-05 + 0.5788544200678375E-05 + 0.5719827541577605E-05 + 0.5651748074648065E-05 + 0.5584301669450619E-05 + 0.5517484207233862E-05 + 0.5451291571569622E-05 + 0.5385719668015278E-05 + 0.5320764414689948E-05 + 0.5256421731863830E-05 + 0.5192687561920732E-05 + 0.5129557860967794E-05 + 0.5067028587084774E-05 + 0.5005095720143899E-05 + 0.4943755254696477E-05 + 0.4883003187131330E-05 + 0.4822835535489290E-05 + 0.4763248333630418E-05 + 0.4704237617136140E-05 + 0.4645799442849260E-05 + 0.4587929884453276E-05 + 0.4530625017265081E-05 + 0.4473880937385411E-05 + 0.4417693758755906E-05 + 0.4362059596913982E-05 + 0.4306974587989210E-05 + 0.4252434887262275E-05 + 0.4198436651588603E-05 + 0.4144976057552462E-05 + 0.4092049301616857E-05 + 0.4039652581840728E-05 + 0.3987782115779253E-05 + 0.3936434142267750E-05 + 0.3885604901802484E-05 + 0.3835290653404275E-05 + 0.3785487678002208E-05 + 0.3736192258273077E-05 + 0.3687400695078027E-05 + 0.3639109312586752E-05 + 0.3591314436875674E-05 + 0.3544012411298415E-05 + 0.3497199603219787E-05 + 0.3450872382073345E-05 + 0.3405027133801978E-05 + 0.3359660269237422E-05 + 0.3314768201501268E-05 + 0.3270347359671717E-05 + 0.3226394198939653E-05 + 0.3182905177077775E-05 + 0.3139876766741112E-05 + 0.3097305467043115E-05 + 0.3055187779941702E-05 + 0.3013520221689138E-05 + 0.2972299336169798E-05 + 0.2931521670506039E-05 + 0.2891183785158209E-05 + 0.2851282268649847E-05 + 0.2811813713104297E-05 + 0.2772774723257876E-05 + 0.2734161932760650E-05 + 0.2695971979328705E-05 + 0.2658201512408477E-05 + 0.2620847210780783E-05 + 0.2583905757752972E-05 + 0.2547373847527970E-05 + 0.2511248204064676E-05 + 0.2475525556362413E-05 + 0.2440202643591140E-05 + 0.2405276235290152E-05 + 0.2370743106645023E-05 + 0.2336600042177062E-05 + 0.2302843856920825E-05 + 0.2269471372135021E-05 + 0.2236479417674917E-05 + 0.2203864854175890E-05 + 0.2171624549160173E-05 + 0.2139755378008400E-05 + 0.2108254246948136E-05 + 0.2077118069774185E-05 + 0.2046343767475018E-05 + 0.2015928291998171E-05 + 0.1985868603617925E-05 + 0.1956161669118106E-05 + 0.1926804486006068E-05 + 0.1897794060844616E-05 + 0.1869127406136824E-05 + 0.1840801565141755E-05 + 0.1812813591045220E-05 + 0.1785160542364722E-05 + 0.1757839507914247E-05 + 0.1730847587203774E-05 + 0.1704181884544599E-05 + 0.1677839534194832E-05 + 0.1651817681964548E-05 + 0.1626113477993598E-05 + 0.1600724102062627E-05 + 0.1575646746431015E-05 + 0.1550878607228334E-05 + 0.1526416909646158E-05 + 0.1502258892213064E-05 + 0.1478401796902448E-05 + 0.1454842894018567E-05 + 0.1431579468022779E-05 + 0.1408608806490437E-05 + 0.1385928224993200E-05 + 0.1363535054320002E-05 + 0.1341426628020047E-05 + 0.1319600306615614E-05 + 0.1298053466561931E-05 + 0.1276783486803579E-05 + 0.1255787772611990E-05 + 0.1235063746144631E-05 + 0.1214608831819536E-05 + 0.1194420479670866E-05 + 0.1174496157560992E-05 + 0.1154833335404340E-05 + 0.1135429507673322E-05 + 0.1116282187375652E-05 + 0.1097388889429763E-05 + 0.1078747152653785E-05 + 0.1060354535418489E-05 + 0.1042208597884430E-05 + 0.1024306922925534E-05 + 0.1006647113551653E-05 + 0.9892267744963817E-06 + 0.9720435324700599E-06 + 0.9550950352904547E-06 + 0.9383789324731339E-06 + 0.9218928944367397E-06 + 0.9056346133490742E-06 + 0.8896017830836302E-06 + 0.8737921174416369E-06 + 0.8582033526874380E-06 + 0.8428332268431728E-06 + 0.8276794968693540E-06 + 0.8127399428593661E-06 + 0.7980123467549063E-06 + 0.7834945084285026E-06 + 0.7691842514934912E-06 + 0.7550794015393429E-06 + 0.7411778010709719E-06 + 0.7274773168811609E-06 + 0.7139758179033673E-06 + 0.7006711890021665E-06 + 0.6875613398625047E-06 + 0.6746441825134082E-06 + 0.6619176439093639E-06 + 0.6493796762543348E-06 + 0.6370282343312786E-06 + 0.6248612868718419E-06 + 0.6128768282513901E-06 + 0.6010728556956436E-06 + 0.5894473794250430E-06 + 0.5779984356462729E-06 + 0.5667240637222044E-06 + 0.5556223150628302E-06 + 0.5446912673102466E-06 + 0.5339290015967569E-06 + 0.5233336101952000E-06 + 0.5129032118209025E-06 + 0.5026359290485862E-06 + 0.4925298947071514E-06 + 0.4825832681876012E-06 + 0.4727942131361129E-06 + 0.4631609026022353E-06 + 0.4536815362500112E-06 + 0.4443543184234574E-06 + 0.4351774620635552E-06 + 0.4261492067273763E-06 + 0.4172677971083499E-06 + 0.4085314857147747E-06 + 0.3999385515480996E-06 + 0.3914872792186264E-06 + 0.3831759604315104E-06 + 0.3750029132498733E-06 + 0.3669664618565554E-06 + 0.3590649368415206E-06 + 0.3512966948912045E-06 + 0.3436600993352119E-06 + 0.3361535192743367E-06 + 0.3287753495836334E-06 + 0.3215239923306920E-06 + 0.3143978547668651E-06 + 0.3073953695359369E-06 + 0.3005149770448405E-06 + 0.2937551223401282E-06 + 0.2871142754046126E-06 + 0.2805909145657515E-06 + 0.2741835222891900E-06 + 0.2678906054507404E-06 + 0.2617106798577288E-06 + 0.2556422650021947E-06 + 0.2496839042341867E-06 + 0.2438341504373404E-06 + 0.2380915597649057E-06 + 0.2324547116008549E-06 + 0.2269221954553452E-06 + 0.2214926037362150E-06 + 0.2161645514231889E-06 + 0.2109366642164234E-06 + 0.2058075703832306E-06 + 0.2007759200743204E-06 + 0.1958403747527508E-06 + 0.1909995981554307E-06 + 0.1862522751627763E-06 + 0.1815971025395213E-06 + 0.1770327790704231E-06 + 0.1725580239271029E-06 + 0.1681715687298522E-06 + 0.1638721469040527E-06 + 0.1596585115028865E-06 + 0.1555294285897580E-06 + 0.1514836658495047E-06 + 0.1475200097556200E-06 + 0.1436372602917908E-06 + 0.1398342189197410E-06 + 0.1361097051199569E-06 + 0.1324625524209864E-06 + 0.1288915957158016E-06 + 0.1253956870592073E-06 + 0.1219736930070829E-06 + 0.1186244814003926E-06 + 0.1153469364338554E-06 + 0.1121399572744126E-06 + 0.1090024443257890E-06 + 0.1059333135058960E-06 + 0.1029314961199833E-06 + 0.9999592469142185E-07 + 0.9712554642703854E-07 + 0.9431932431071543E-07 + 0.9157622255505599E-07 + 0.8889521923535970E-07 + 0.8627530856521691E-07 + 0.8371548602527756E-07 + 0.8121476013922637E-07 + 0.7877215588606075E-07 + 0.7638669957638195E-07 + 0.7405742976017395E-07 + 0.7178340172808934E-07 + 0.6956367219250183E-07 + 0.6739730931462164E-07 + 0.6528339824104762E-07 + 0.6322102565425908E-07 + 0.6120928890994026E-07 + 0.5924730255019760E-07 + 0.5733418278984618E-07 + 0.5546905576600318E-07 + 0.5365106496995947E-07 + 0.5187935572501909E-07 + 0.5015308254160253E-07 + 0.4847141739836779E-07 + 0.4683353428481151E-07 + 0.4523861567258908E-07 + 0.4368586158337104E-07 + 0.4217447424914880E-07 + 0.4070366370191280E-07 + 0.3927265755401233E-07 + 0.3788068584507171E-07 + 0.3652698576200950E-07 + 0.3521081206011154E-07 + 0.3393142215637385E-07 + 0.3268807999265849E-07 + 0.3148006702242495E-07 + 0.3030666761146307E-07 + 0.2916717205988652E-07 + 0.2806088807789577E-07 + 0.2698712655377289E-07 + 0.2594520375213874E-07 + 0.2493445319872255E-07 + 0.2395421187674097E-07 + 0.2300382162227582E-07 + 0.2208264133804798E-07 + 0.2119003367656056E-07 + 0.2032536565641865E-07 + 0.1948802112689473E-07 + 0.1867738799220295E-07 + 0.1789285807056747E-07 + 0.1713383972260280E-07 + 0.1639974567852613E-07 + 0.1568999216794659E-07 + 0.1500401163928083E-07 + 0.1434124123637235E-07 + 0.1370112122074475E-07 + 0.1308310770480706E-07 + 0.1248666182674019E-07 + 0.1191124749475787E-07 + 0.1135634407148985E-07 + 0.1082143628081441E-07 + 0.1030601130013087E-07 + 0.9809571331497338E-08 + 0.9331624273277917E-08 + 0.8871680191513770E-08 + 0.8429263721650072E-08 + 0.8003905528819542E-08 + 0.7595138189577564E-08 + 0.7202508373820051E-08 + 0.6825569110953104E-08 + 0.6463875113543610E-08 + 0.6116994691212772E-08 + 0.5784502835850740E-08 + 0.5465976021382586E-08 + 0.5161003808022223E-08 + 0.4869182752948288E-08 + 0.4590110720089723E-08 + 0.4323398136291383E-08 + 0.4068662729431677E-08 + 0.3825523383607424E-08 + 0.3593611013381448E-08 + 0.3372564126256740E-08 + 0.3162022259066931E-08 + 0.2961636440410894E-08 + 0.2771065569928872E-08 + 0.2589969472247519E-08 + 0.2418018921518327E-08 + 0.2254892825729864E-08 + 0.2100270934956491E-08 + 0.1953843405108197E-08 + 0.1815308771704584E-08 + 0.1684366349884289E-08 + 0.1560725318770627E-08 + 0.1444103465311028E-08 + 0.1334219312962341E-08 + 0.1230800710395540E-08 + 0.1133584322809299E-08 + 0.1042307527155682E-08 + 0.9567164926029522E-09 + 0.8765663935606096E-09 + 0.8016131088032141E-09 + 0.7316207839579734E-09 + 0.6663627376702696E-09 + 0.6056130019505355E-09 + 0.5491533595184195E-09 + 0.4967749119410826E-09 + 0.4482694985792008E-09 + 0.4034362044437524E-09 + 0.3620835568222577E-09 + 0.3240208597323032E-09 + 0.2890641703330043E-09 + 0.2570390884507767E-09 + 0.2277720431716881E-09 + 0.2010957381347274E-09 + 0.1768524964757117E-09 + 0.1548855358224948E-09 + 0.1350438851041131E-09 + 0.1171862458562429E-09 + 0.1011722911881315E-09 + 0.8686705839382592E-10 + 0.7414528587372167E-10 + 0.6288277163748662E-10 + 0.5296024909910822E-10 + 0.4426815862712461E-10 + 0.3669809857107602E-10 + 0.3014618919957087E-10 + 0.2451823277829813E-10 + 0.1972129655038402E-10 + 0.1566658619718916E-10 + 0.1227496426549244E-10 + 0.9468677065939884E-11 + 0.7173708283485212E-11 + 0.5325556968224257E-11 + 0.3861218900678694E-11 + 0.2721176625501337E-11 + 0.1855610031291589E-11 + 0.1216373069580000E-11 + 0.7581288056861643E-12 + 0.4440845117506919E-12 + 0.2390667114240400E-12 + 0.1115952756033254E-12 + 0.4248859746150187E-13 + 0.1512177372408912E-13 + 0.1219299623941332E-13 + 0.1393065380023574E-13 + 0.0000000000000000E+00 + 0.9798839010386438E+01 + 0.1955523233067563E+02 + 0.2926927956681157E+02 + 0.3894108021443149E+02 + 0.4857073365886582E+02 + 0.5815833917513820E+02 + 0.6770399592796547E+02 + 0.7720780297175767E+02 + 0.8666985925061809E+02 + 0.9609026359834327E+02 + 0.1054691147384229E+03 + 0.1148065112840398E+03 + 0.1241025517380702E+03 + 0.1333573344930833E+03 + 0.1425709578313418E+03 + 0.1517435199248013E+03 + 0.1608751188351110E+03 + 0.1699658525136128E+03 + 0.1790158188013422E+03 + 0.1880251154290279E+03 + 0.1969938400170917E+03 + 0.2059220900756484E+03 + 0.2148099630045064E+03 + 0.2236575560931674E+03 + 0.2324649665208255E+03 + 0.2412322913563691E+03 + 0.2499596275583790E+03 + 0.2586470719751296E+03 + 0.2672947213445884E+03 + 0.2759026722944159E+03 + 0.2844710213419664E+03 + 0.2929998648942869E+03 + 0.3014892992481176E+03 + 0.3099394205898923E+03 + 0.3183503249957375E+03 + 0.3267221084314734E+03 + 0.3350548667526132E+03 + 0.3433486957043633E+03 + 0.3516036909216232E+03 + 0.3598199479289858E+03 + 0.3679975621407372E+03 + 0.3761366288608567E+03 + 0.3842372432830167E+03 + 0.3922995004905828E+03 + 0.4003234954566141E+03 + 0.4083093230438624E+03 + 0.4162570780047734E+03 + 0.4241668549814853E+03 + 0.4320387485058299E+03 + 0.4398728529993323E+03 + 0.4476692627732106E+03 + 0.4554280720283761E+03 + 0.4631493748554336E+03 + 0.4708332652346805E+03 + 0.4784798370361081E+03 + 0.4860891840194007E+03 + 0.4936613998339354E+03 + 0.5011965780187833E+03 + 0.5086948120027079E+03 + 0.5161561951041662E+03 + 0.5235808205313090E+03 + 0.5309687813819792E+03 + 0.5383201706437138E+03 + 0.5456350811937426E+03 + 0.5529136057989888E+03 + 0.5601558371160689E+03 + 0.5673618676912920E+03 + 0.5745317899606614E+03 + 0.5816656962498728E+03 + 0.5887636787743151E+03 + 0.5958258296390712E+03 + 0.6028522408389164E+03 + 0.6098430042583196E+03 + 0.6167982116714431E+03 + 0.6237179547421416E+03 + 0.6306023250239640E+03 + 0.6374514139601516E+03 + 0.6442653128836398E+03 + 0.6510441130170563E+03 + 0.6577879054727223E+03 + 0.6644967812526526E+03 + 0.6711708312485548E+03 + 0.6778101462418299E+03 + 0.6844148169035718E+03 + 0.6909849337945684E+03 + 0.6975205873652996E+03 + 0.7040218679559396E+03 + 0.7104888657963553E+03 + 0.7169216710061066E+03 + 0.7233203735944478E+03 + 0.7296850634603245E+03 + 0.7360158303923771E+03 + 0.7423127640689387E+03 + 0.7485759540580353E+03 + 0.7548054898173866E+03 + 0.7610014606944051E+03 + 0.7671639559261964E+03 + 0.7732930646395605E+03 + 0.7793888758509889E+03 + 0.7854514784666676E+03 + 0.7914809612824749E+03 + 0.7974774129839832E+03 + 0.8034409221464575E+03 + 0.8093715772348561E+03 + 0.8152694666038309E+03 + 0.8211346784977263E+03 + 0.8269673010505803E+03 + 0.8327674222861244E+03 + 0.8385351301177833E+03 + 0.8442705123486738E+03 + 0.8499736566716077E+03 + 0.8556446506690885E+03 + 0.8612835818133133E+03 + 0.8668905374661733E+03 + 0.8724656048792517E+03 + 0.8780088711938256E+03 + 0.8835204234408650E+03 + 0.8890003485410332E+03 + 0.8944487333046868E+03 + 0.8998656644318759E+03 + 0.9052512285123430E+03 + 0.9106055120255248E+03 + 0.9159286013405500E+03 + 0.9212205827162416E+03 + 0.9264815423011160E+03 + 0.9317115661333813E+03 + 0.9369107401409401E+03 + 0.9420791501413880E+03 + 0.9472168818420133E+03 + 0.9523240208397983E+03 + 0.9574006526214180E+03 + 0.9624468625632404E+03 + 0.9674627359313275E+03 + 0.9724483578814335E+03 + 0.9774038134590066E+03 + 0.9823291875991883E+03 + 0.9872245651268123E+03 + 0.9920900307564068E+03 + 0.9969256690921922E+03 + 0.1001731564628082E+04 + 0.1006507801747685E+04 + 0.1011254464724300E+04 + 0.1015971637720921E+04 + 0.1020659404790236E+04 + 0.1025317849874624E+04 + 0.1029947056806157E+04 + 0.1034547109306605E+04 + 0.1039118090987424E+04 + 0.1043660085349769E+04 + 0.1048173175784486E+04 + 0.1052657445572113E+04 + 0.1057112977882885E+04 + 0.1061539855776725E+04 + 0.1065938162203253E+04 + 0.1070307980001782E+04 + 0.1074649391901316E+04 + 0.1078962480520555E+04 + 0.1083247328367891E+04 + 0.1087504017841407E+04 + 0.1091732631228882E+04 + 0.1095933250707789E+04 + 0.1100105958345291E+04 + 0.1104250836098246E+04 + 0.1108367965813206E+04 + 0.1112457429226414E+04 + 0.1116519307963809E+04 + 0.1120553683541020E+04 + 0.1124560637363373E+04 + 0.1128540250725883E+04 + 0.1132492604813262E+04 + 0.1136417780699913E+04 + 0.1140315859349932E+04 + 0.1144186921617110E+04 + 0.1148031048244930E+04 + 0.1151848319866568E+04 + 0.1155638817004894E+04 + 0.1159402620072471E+04 + 0.1163139809371554E+04 + 0.1166850465094094E+04 + 0.1170534667321732E+04 + 0.1174192496025803E+04 + 0.1177824031067338E+04 + 0.1181429352197059E+04 + 0.1185008539055379E+04 + 0.1188561671172409E+04 + 0.1192088827967949E+04 + 0.1195590088751495E+04 + 0.1199065532722234E+04 + 0.1202515238969049E+04 + 0.1205939286470513E+04 + 0.1209337754094895E+04 + 0.1212710720600156E+04 + 0.1216058264633949E+04 + 0.1219380464733622E+04 + 0.1222677399326217E+04 + 0.1225949146728465E+04 + 0.1229195785146796E+04 + 0.1232417392677328E+04 + 0.1235614047305876E+04 + 0.1238785826907947E+04 + 0.1241932809248739E+04 + 0.1245055071983146E+04 + 0.1248152692655755E+04 + 0.1251225748700845E+04 + 0.1254274317442389E+04 + 0.1257298476094052E+04 + 0.1260298301759195E+04 + 0.1263273871430869E+04 + 0.1266225261991820E+04 + 0.1269152550214486E+04 + 0.1272055812761001E+04 + 0.1274935126183188E+04 + 0.1277790566922567E+04 + 0.1280622211310349E+04 + 0.1283430135567439E+04 + 0.1286214415804435E+04 + 0.1288975128021629E+04 + 0.1291712348109004E+04 + 0.1294426151846239E+04 + 0.1297116614902704E+04 + 0.1299783812837464E+04 + 0.1302427821099276E+04 + 0.1305048715026591E+04 + 0.1307646569847552E+04 + 0.1310221460679996E+04 + 0.1312773462531455E+04 + 0.1315302650299150E+04 + 0.1317809098769998E+04 + 0.1320292882620610E+04 + 0.1322754076417288E+04 + 0.1325192754616029E+04 + 0.1327608991562522E+04 + 0.1330002861492151E+04 + 0.1332374438529990E+04 + 0.1334723796690808E+04 + 0.1337051009879069E+04 + 0.1339356151888927E+04 + 0.1341639296404232E+04 + 0.1343900516998526E+04 + 0.1346139887135042E+04 + 0.1348357480166711E+04 + 0.1350553369336153E+04 + 0.1352727627775684E+04 + 0.1354880328507311E+04 + 0.1357011544442735E+04 + 0.1359121348383352E+04 + 0.1361209813020247E+04 + 0.1363277010934204E+04 + 0.1365323014595695E+04 + 0.1367347896364887E+04 + 0.1369351728491642E+04 + 0.1371334583115513E+04 + 0.1373296532265747E+04 + 0.1375237647861283E+04 + 0.1377158001710757E+04 + 0.1379057665512493E+04 + 0.1380936710854511E+04 + 0.1382795209214526E+04 + 0.1384633231959942E+04 + 0.1386450850347859E+04 + 0.1388248135525071E+04 + 0.1390025158528061E+04 + 0.1391781990283010E+04 + 0.1393518701605791E+04 + 0.1395235363201968E+04 + 0.1396932045666800E+04 + 0.1398608819485238E+04 + 0.1400265755031928E+04 + 0.1401902922571209E+04 + 0.1403520392257112E+04 + 0.1405118234133361E+04 + 0.1406696518133374E+04 + 0.1408255314080263E+04 + 0.1409794691686832E+04 + 0.1411314720555579E+04 + 0.1412815470178694E+04 + 0.1414297009938061E+04 + 0.1415759409105257E+04 + 0.1417202736841554E+04 + 0.1418627062197914E+04 + 0.1420032454114994E+04 + 0.1421418981423145E+04 + 0.1422786712842409E+04 + 0.1424135716982524E+04 + 0.1425466062342918E+04 + 0.1426777817312715E+04 + 0.1428071050170731E+04 + 0.1429345829085475E+04 + 0.1430602222115150E+04 + 0.1431840297207651E+04 + 0.1433060122200567E+04 + 0.1434261764821181E+04 + 0.1435445292686469E+04 + 0.1436610773303097E+04 + 0.1437758274067429E+04 + 0.1438887862265519E+04 + 0.1439999605073115E+04 + 0.1441093569555661E+04 + 0.1442169822668288E+04 + 0.1443228431255825E+04 + 0.1444269462052794E+04 + 0.1445292981683409E+04 + 0.1446299056661578E+04 + 0.1447287753390901E+04 + 0.1448259138164671E+04 + 0.1449213277165876E+04 + 0.1450150236467197E+04 + 0.1451070082031008E+04 + 0.1451972879709373E+04 + 0.1452858695244054E+04 + 0.1453727594266504E+04 + 0.1454579642297870E+04 + 0.1455414904748991E+04 + 0.1456233446920399E+04 + 0.1457035334002321E+04 + 0.1457820631074676E+04 + 0.1458589403107076E+04 + 0.1459341714958828E+04 + 0.1460077631378929E+04 + 0.1460797217006073E+04 + 0.1461500536368644E+04 + 0.1462187653884721E+04 + 0.1462858633862076E+04 + 0.1463513540498173E+04 + 0.1464152437880171E+04 + 0.1464775389984921E+04 + 0.1465382460678968E+04 + 0.1465973713718549E+04 + 0.1466549212749595E+04 + 0.1467109021307732E+04 + 0.1467653202818275E+04 + 0.1468181820596236E+04 + 0.1468694937846319E+04 + 0.1469192617662920E+04 + 0.1469674923030131E+04 + 0.1470141916821733E+04 + 0.1470593661801204E+04 + 0.1471030220621715E+04 + 0.1471451655826127E+04 + 0.1471858029846998E+04 + 0.1472249405006577E+04 + 0.1472625843516806E+04 + 0.1472987407479322E+04 + 0.1473334158885454E+04 + 0.1473666159616224E+04 + 0.1473983471442348E+04 + 0.1474286156024235E+04 + 0.1474574274911985E+04 + 0.1474847889545396E+04 + 0.1475107061253955E+04 + 0.1475351851256844E+04 + 0.1475582320662938E+04 + 0.1475798530470804E+04 + 0.1476000541568704E+04 + 0.1476188414734594E+04 + 0.1476362210636119E+04 + 0.1476521989830622E+04 + 0.1476667812765137E+04 + 0.1476799739776390E+04 + 0.1476917831090801E+04 + 0.1477022146824487E+04 + 0.1477112746983253E+04 + 0.1477189691462598E+04 + 0.1477253040047717E+04 + 0.1477302852413497E+04 + 0.1477339188124516E+04 + 0.1477362106635049E+04 + 0.1477371667289061E+04 + 0.1477367929320212E+04 + 0.1477350951851855E+04 + 0.1477320793897035E+04 + 0.1477277514358491E+04 + 0.1477221172028656E+04 + 0.1477151825589655E+04 + 0.1477069533613308E+04 + 0.1476974354561125E+04 + 0.1476866346784312E+04 + 0.1476745568523769E+04 + 0.1476612077910085E+04 + 0.1476465932963545E+04 + 0.1476307191594129E+04 + 0.1476135911601507E+04 + 0.1475952150675044E+04 + 0.1475755966393796E+04 + 0.1475547416226516E+04 + 0.1475326557531646E+04 + 0.1475093447557325E+04 + 0.1474848143441383E+04 + 0.1474590702211343E+04 + 0.1474321180784423E+04 + 0.1474039635967532E+04 + 0.1473746124457274E+04 + 0.1473440702839945E+04 + 0.1473123427591536E+04 + 0.1472794355077728E+04 + 0.1472453541553899E+04 + 0.1472101043165118E+04 + 0.1471736915946147E+04 + 0.1471361215821442E+04 + 0.1470973998605151E+04 + 0.1470575320001119E+04 + 0.1470165235602879E+04 + 0.1469743800893660E+04 + 0.1469311071246385E+04 + 0.1468867101923669E+04 + 0.1468411948077818E+04 + 0.1467945664750836E+04 + 0.1467468306874417E+04 + 0.1466979929269949E+04 + 0.1466480586648512E+04 + 0.1465970333610882E+04 + 0.1465449224647526E+04 + 0.1464917314138605E+04 + 0.1464374656353971E+04 + 0.1463821305453174E+04 + 0.1463257315485454E+04 + 0.1462682740389743E+04 + 0.1462097633994668E+04 + 0.1461502050018550E+04 + 0.1460896042069403E+04 + 0.1460279663644931E+04 + 0.1459652968132536E+04 + 0.1459016008809310E+04 + 0.1458368838842039E+04 + 0.1457711511287202E+04 + 0.1457044079090972E+04 + 0.1456366595089216E+04 + 0.1455679112007490E+04 + 0.1454981682461048E+04 + 0.1454274358954836E+04 + 0.1453557193883491E+04 + 0.1452830239531346E+04 + 0.1452093548072425E+04 + 0.1451347171570447E+04 + 0.1450591161978824E+04 + 0.1449825571140658E+04 + 0.1449050450788750E+04 + 0.1448265852545590E+04 + 0.1447471827923361E+04 + 0.1446668428323942E+04 + 0.1445855705038903E+04 + 0.1445033709249509E+04 + 0.1444202492026715E+04 + 0.1443362104331173E+04 + 0.1442512597013226E+04 + 0.1441654020812911E+04 + 0.1440786426359958E+04 + 0.1439909864173790E+04 + 0.1439024384663523E+04 + 0.1438130038127968E+04 + 0.1437226874755625E+04 + 0.1436314944624694E+04 + 0.1435394297703060E+04 + 0.1434464983848309E+04 + 0.1433527052807715E+04 + 0.1432580554218247E+04 + 0.1431625537606567E+04 + 0.1430662052389030E+04 + 0.1429690147871685E+04 + 0.1428709873250274E+04 + 0.1427721277610232E+04 + 0.1426724409926686E+04 + 0.1425719319064459E+04 + 0.1424706053778064E+04 + 0.1423684662711710E+04 + 0.1422655194399297E+04 + 0.1421617697264420E+04 + 0.1420572219620365E+04 + 0.1419518809670115E+04 + 0.1418457515506342E+04 + 0.1417388385111413E+04 + 0.1416311466357389E+04 + 0.1415226807006024E+04 + 0.1414134454708763E+04 + 0.1413034457006748E+04 + 0.1411926861330810E+04 + 0.1410811715001477E+04 + 0.1409689065228967E+04 + 0.1408558959113194E+04 + 0.1407421443643764E+04 + 0.1406276565699975E+04 + 0.1405124372050820E+04 + 0.1403964909354985E+04 + 0.1402798224160848E+04 + 0.1401624362906482E+04 + 0.1400443371919652E+04 + 0.1399255297417815E+04 + 0.1398060185508124E+04 + 0.1396858082187424E+04 + 0.1395649033342252E+04 + 0.1394433084748841E+04 + 0.1393210282073114E+04 + 0.1391980670870689E+04 + 0.1390744296586877E+04 + 0.1389501204556682E+04 + 0.1388251440004802E+04 + 0.1386995048045627E+04 + 0.1385732073683240E+04 + 0.1384462561811420E+04 + 0.1383186557213635E+04 + 0.1381904104563050E+04 + 0.1380615248422521E+04 + 0.1379320033244597E+04 + 0.1378018503371523E+04 + 0.1376710703035233E+04 + 0.1375396676357359E+04 + 0.1374076467349221E+04 + 0.1372750119911836E+04 + 0.1371417677835914E+04 + 0.1370079184801856E+04 + 0.1368734684379758E+04 + 0.1367384220029408E+04 + 0.1366027835100290E+04 + 0.1364665572831577E+04 + 0.1363297476352138E+04 + 0.1361923588680535E+04 + 0.1360543952725023E+04 + 0.1359158611283549E+04 + 0.1357767607043755E+04 + 0.1356370982582975E+04 + 0.1354968780368236E+04 + 0.1353561042756260E+04 + 0.1352147811993461E+04 + 0.1350729130215946E+04 + 0.1349305039449515E+04 + 0.1347875581609662E+04 + 0.1346440798501575E+04 + 0.1345000731820132E+04 + 0.1343555423149908E+04 + 0.1342104913965168E+04 + 0.1340649245629873E+04 + 0.1339188459397676E+04 + 0.1337722596411923E+04 + 0.1336251697705652E+04 + 0.1334775804201598E+04 + 0.1333294956712185E+04 + 0.1331809195939533E+04 + 0.1330318562475454E+04 + 0.1328823096801452E+04 + 0.1327322839288728E+04 + 0.1325817830198173E+04 + 0.1324308109680371E+04 + 0.1322793717775602E+04 + 0.1321274694413836E+04 + 0.1319751079414738E+04 + 0.1318222912487667E+04 + 0.1316690233231673E+04 + 0.1315153081135501E+04 + 0.1313611495577588E+04 + 0.1312065515826065E+04 + 0.1310515181038756E+04 + 0.1308960530263178E+04 + 0.1307401602436542E+04 + 0.1305838436385751E+04 + 0.1304271070827402E+04 + 0.1302699544367786E+04 + 0.1301123895502884E+04 + 0.1299544162618375E+04 + 0.1297960383989627E+04 + 0.1296372597781703E+04 + 0.1294780842049360E+04 + 0.1293185154737046E+04 + 0.1291585573678904E+04 + 0.1289982136598771E+04 + 0.1288374881110175E+04 + 0.1286763844716337E+04 + 0.1285149064810174E+04 + 0.1283530578674294E+04 + 0.1281908423480999E+04 + 0.1280282636292284E+04 + 0.1278653254059837E+04 + 0.1277020313625039E+04 + 0.1275383851718965E+04 + 0.1273743904962383E+04 + 0.1272100509865754E+04 + 0.1270453702829233E+04 + 0.1268803520142666E+04 + 0.1267149997985594E+04 + 0.1265493172427252E+04 + 0.1263833079426566E+04 + 0.1262169754832157E+04 + 0.1260503234382338E+04 + 0.1258833553705116E+04 + 0.1257160748318192E+04 + 0.1255484853628957E+04 + 0.1253805904934499E+04 + 0.1252123937421598E+04 + 0.1250438986166725E+04 + 0.1248751086136047E+04 + 0.1247060272185423E+04 + 0.1245366579060406E+04 + 0.1243670041396241E+04 + 0.1241970693717868E+04 + 0.1240268570439918E+04 + 0.1238563705866716E+04 + 0.1236856134192281E+04 + 0.1235145889500325E+04 + 0.1233433005764253E+04 + 0.1231717516847163E+04 + 0.1229999456501846E+04 + 0.1228278858370786E+04 + 0.1226555755986162E+04 + 0.1224830182769845E+04 + 0.1223102172033398E+04 + 0.1221371756978079E+04 + 0.1219638970694839E+04 + 0.1217903846164322E+04 + 0.1216166416256863E+04 + 0.1214426713732496E+04 + 0.1212684771240941E+04 + 0.1210940621321616E+04 + 0.1209194296403631E+04 + 0.1207445828805788E+04 + 0.1205695250736586E+04 + 0.1203942594294211E+04 + 0.1202187891466549E+04 + 0.1200431174131174E+04 + 0.1198672474055355E+04 + 0.1196911822896055E+04 + 0.1195149252199931E+04 + 0.1193384793403329E+04 + 0.1191618477832293E+04 + 0.1189850336702557E+04 + 0.1188080401119550E+04 + 0.1186308702078394E+04 + 0.1184535270463903E+04 + 0.1182760137050587E+04 + 0.1180983332502644E+04 + 0.1179204887373971E+04 + 0.1177424832108155E+04 + 0.1175643197038477E+04 + 0.1173860012387911E+04 + 0.1172075308269124E+04 + 0.1170289114684478E+04 + 0.1168501461526024E+04 + 0.1166712378575512E+04 + 0.1164921895504380E+04 + 0.1163130041873763E+04 + 0.1161336847134486E+04 + 0.1159542340627070E+04 + 0.1157746551581727E+04 + 0.1155949509118365E+04 + 0.1154151242246581E+04 + 0.1152351779865670E+04 + 0.1150551150764616E+04 + 0.1148749383622100E+04 + 0.1146946507006492E+04 + 0.1145142549375859E+04 + 0.1143337539077960E+04 + 0.1141531504350246E+04 + 0.1139724473319863E+04 + 0.1137916474003648E+04 + 0.1136107534308134E+04 + 0.1134297682029545E+04 + 0.1132486944853800E+04 + 0.1130675350356508E+04 + 0.1128862926002976E+04 + 0.1127049699148199E+04 + 0.1125235697036871E+04 + 0.1123420946803373E+04 + 0.1121605475471784E+04 + 0.1119789309955874E+04 + 0.1117972477059107E+04 + 0.1116155003474639E+04 + 0.1114336915785321E+04 + 0.1112518240463696E+04 + 0.1110699003872000E+04 + 0.1108879232262164E+04 + 0.1107058951775810E+04 + 0.1105238188444254E+04 + 0.1103416968188506E+04 + 0.1101595316819269E+04 + 0.1099773260036937E+04 + 0.1097950823431601E+04 + 0.1096128032483042E+04 + 0.1094304912560736E+04 + 0.1092481488923851E+04 + 0.1090657786721250E+04 + 0.1088833830991487E+04 + 0.1087009646662811E+04 + 0.1085185258553162E+04 + 0.1083360691370177E+04 + 0.1081535969711182E+04 + 0.1079711118063199E+04 + 0.1077886160802943E+04 + 0.1076061122196820E+04 + 0.1074236026400932E+04 + 0.1072410897461072E+04 + 0.1070585759312728E+04 + 0.1068760635781079E+04 + 0.1066935550581001E+04 + 0.1065110527317058E+04 + 0.1063285589483513E+04 + 0.1061460760464317E+04 + 0.1059636063533118E+04 + 0.1057811521853254E+04 + 0.1055987158477759E+04 + 0.1054162996349359E+04 + 0.1052339058300473E+04 + 0.1050515367053214E+04 + 0.1048691945219386E+04 + 0.1046868815300491E+04 + 0.1045045999687718E+04 + 0.1043223520661955E+04 + 0.1041401400393779E+04 + 0.1039579660943462E+04 + 0.1037758324260969E+04 + 0.1035937412185958E+04 + 0.1034116946447781E+04 + 0.1032296948665483E+04 + 0.1030477440347800E+04 + 0.1028658442893166E+04 + 0.1026839977589702E+04 + 0.1025022065615228E+04 + 0.1023204728037253E+04 + 0.1021387985812982E+04 + 0.1019571859789311E+04 + 0.1017756370702832E+04 + 0.1015941539179827E+04 + 0.1014127385736273E+04 + 0.1012313930777841E+04 + 0.1010501194599893E+04 + 0.1008689197387485E+04 + 0.1006877959215369E+04 + 0.1005067500047985E+04 + 0.1003257839739470E+04 + 0.1001448998033654E+04 + 0.9996409945640588E+03 + 0.9978338488539000E+03 + 0.9960275803160865E+03 + 0.9942222082532206E+03 + 0.9924177518575971E+03 + 0.9906142302112050E+03 + 0.9888116622857258E+03 + 0.9870100669425344E+03 + 0.9852094629326991E+03 + 0.9834098688969806E+03 + 0.9816113033658343E+03 + 0.9798137847594078E+03 + 0.9780173313875416E+03 + 0.9762219614497701E+03 + 0.9744276930353211E+03 + 0.9726345441231144E+03 + 0.9708425325817649E+03 + 0.9690516761695786E+03 + 0.9672619925345559E+03 + 0.9654734992143910E+03 + 0.9636862136364700E+03 + 0.9619001531178731E+03 + 0.9601153348653728E+03 + 0.9583317759754359E+03 + 0.9565494934342219E+03 + 0.9547685041175836E+03 + 0.9529888247910662E+03 + 0.9512104721099099E+03 + 0.9494334626190463E+03 + 0.9476578127531011E+03 + 0.9458835388363935E+03 + 0.9441106570829351E+03 + 0.9423391835964316E+03 + 0.9405691343702805E+03 + 0.9388005252875744E+03 + 0.9370333721210975E+03 + 0.9352676905333283E+03 + 0.9335034960764374E+03 + 0.9317408041922902E+03 + 0.9299796302124438E+03 + 0.9282199893581487E+03 + 0.9264618967403501E+03 + 0.9247053673596845E+03 + 0.9229504161064831E+03 + 0.9211970577607686E+03 + 0.9194453069922590E+03 + 0.9176951783603641E+03 + 0.9159466863141871E+03 + 0.9141998451925248E+03 + 0.9124546692238670E+03 + 0.9107111725263966E+03 + 0.9089693691079898E+03 + 0.9072292728662160E+03 + 0.9054908975883380E+03 + 0.9037542569513121E+03 + 0.9020193645217865E+03 + 0.9002862337561043E+03 + 0.8985548780003004E+03 + 0.8968253104901036E+03 + 0.8950975443509361E+03 + 0.8933715925979128E+03 + 0.8916474681358421E+03 + 0.8899251837592257E+03 + 0.8882047521522578E+03 + 0.8864861858888272E+03 + 0.8847694974325146E+03 + 0.8830546991365949E+03 + 0.8813418032440349E+03 + 0.8796308218874962E+03 + 0.8779217670893322E+03 + 0.8762146507615906E+03 + 0.8745094847060118E+03 + 0.8728062806140292E+03 + 0.8711050500667699E+03 + 0.8694058045350541E+03 + 0.8677085553793946E+03 + 0.8660133138499986E+03 + 0.8643200910867656E+03 + 0.8626288981192884E+03 + 0.8609397458668531E+03 + 0.8592526451384393E+03 + 0.8575676066327196E+03 + 0.8558846409380594E+03 + 0.8542037585325181E+03 + 0.8525249697838477E+03 + 0.8508482849494939E+03 + 0.8491737141765947E+03 + 0.8475012675019825E+03 + 0.8458309548521825E+03 + 0.8441627860434126E+03 + 0.8424967707815844E+03 + 0.8408329186623025E+03 + 0.8391712391708650E+03 + 0.8375117416822628E+03 + 0.8358544354611805E+03 + 0.8341993296619953E+03 + 0.8325464333287783E+03 + 0.8308957553952929E+03 + 0.8292473046849970E+03 + 0.8276010899110407E+03 + 0.8259571196762674E+03 + 0.8243154024732143E+03 + 0.8226759466841108E+03 + 0.8210387605808809E+03 + 0.8194038523251405E+03 + 0.8177712299681995E+03 + 0.8161409014510606E+03 + 0.8145128746044201E+03 + 0.8128871571486670E+03 + 0.8112637566938837E+03 + 0.8096426807398467E+03 + 0.8080239366760241E+03 + 0.8064075317815787E+03 + 0.8047934732253651E+03 + 0.8031817680659325E+03 + 0.8015724232515223E+03 + 0.7999654456200697E+03 + 0.7983608418992028E+03 + 0.7967586187062431E+03 + 0.7951587825482050E+03 + 0.7935613398217962E+03 + 0.7919662968134185E+03 + 0.7903736596991654E+03 + 0.7887834345448248E+03 + 0.7871956273058770E+03 + 0.7856102438274965E+03 + 0.7840272898445496E+03 + 0.7824467709815973E+03 + 0.7808686927528926E+03 + 0.7792930605623827E+03 + 0.7777198797037072E+03 + 0.7761491553601994E+03 + 0.7745808926048854E+03 + 0.7730150964004853E+03 + 0.7714517715994117E+03 + 0.7698909229437704E+03 + 0.7683325550653608E+03 + 0.7667766724856753E+03 + 0.7652232796158996E+03 + 0.7636723807569125E+03 + 0.7621239800992858E+03 + 0.7605780817232853E+03 + 0.7590346895988689E+03 + 0.7574938075856886E+03 + 0.7559554394330894E+03 + 0.7544195887801094E+03 + 0.7528862591554801E+03 + 0.7513554539776254E+03 + 0.7498271765546637E+03 + 0.7483014300844055E+03 + 0.7467782176543557E+03 + 0.7452575422417108E+03 + 0.7437394067133620E+03 + 0.7422238138258928E+03 + 0.7407107662255801E+03 + 0.7392002664483948E+03 + 0.7376923169199998E+03 + 0.7361869199557521E+03 + 0.7346840777607011E+03 + 0.7331837924295904E+03 + 0.7316860659468558E+03 + 0.7301909001866274E+03 + 0.7286982969127273E+03 + 0.7272082577786720E+03 + 0.7257207843276700E+03 + 0.7242358779926243E+03 + 0.7227535400961299E+03 + 0.7212737718504759E+03 + 0.7197965743576445E+03 + 0.7183219486093105E+03 + 0.7168498954868426E+03 + 0.7153804157613022E+03 + 0.7139135100934442E+03 + 0.7124491790337166E+03 + 0.7109874230222611E+03 + 0.7095282423889114E+03 + 0.7080716373531957E+03 + 0.7066176080243347E+03 + 0.7051661544012426E+03 + 0.7037172763725267E+03 + 0.7022709737164878E+03 + 0.7008272461011190E+03 + 0.6993860930841078E+03 + 0.6979475141128341E+03 + 0.6965115085243717E+03 + 0.6950780755454865E+03 + 0.6936472142926386E+03 + 0.6922189237631665E+03 + 0.6907932028052080E+03 + 0.6893700501456831E+03 + 0.6879494644410961E+03 + 0.6865314444316574E+03 + 0.6851159888066137E+03 + 0.6837030961839508E+03 + 0.6822927652742299E+03 + 0.6808849947464063E+03 + 0.6794797831875393E+03 + 0.6780771292284994E+03 + 0.6766770314477661E+03 + 0.6752794883360946E+03 + 0.6738844984001524E+03 + 0.6724920600887280E+03 + 0.6711021717740821E+03 + 0.6697148319306753E+03 + 0.6683300390175115E+03 + 0.6669477914106603E+03 + 0.6655680875486413E+03 + 0.6641909258444597E+03 + 0.6628163046189928E+03 + 0.6614442221843998E+03 + 0.6600746767981480E+03 + 0.6587076666363959E+03 + 0.6573431899753443E+03 + 0.6559812451019254E+03 + 0.6546218302120236E+03 + 0.6532649434982669E+03 + 0.6519105831115181E+03 + 0.6505587471188318E+03 + 0.6492094336782250E+03 + 0.6478626409734133E+03 + 0.6465183670982342E+03 + 0.6451766101443994E+03 + 0.6438373681738062E+03 + 0.6425006391585062E+03 + 0.6411664210813831E+03 + 0.6398347119115392E+03 + 0.6385055095338092E+03 + 0.6371788119275706E+03 + 0.6358546171359174E+03 + 0.6345329231141274E+03 + 0.6332137277888616E+03 + 0.6318970290520418E+03 + 0.6305828247071491E+03 + 0.6292711125734068E+03 + 0.6279618904840934E+03 + 0.6266551561880452E+03 + 0.6253509074856511E+03 + 0.6240491422385907E+03 + 0.6227498582243052E+03 + 0.6214530531771426E+03 + 0.6201587247961675E+03 + 0.6188668706952716E+03 + 0.6175774885575644E+03 + 0.6162905761761448E+03 + 0.6150061312662482E+03 + 0.6137241514875486E+03 + 0.6124446344569141E+03 + 0.6111675777058978E+03 + 0.6098929787920216E+03 + 0.6086208353538252E+03 + 0.6073511449548527E+03 + 0.6060839051421535E+03 + 0.6048191134899139E+03 + 0.6035567674949440E+03 + 0.6022968646631889E+03 + 0.6010394025815673E+03 + 0.5997843787661717E+03 + 0.5985317906633139E+03 + 0.5972816356653960E+03 + 0.5960339110818865E+03 + 0.5947886142644841E+03 + 0.5935457427431463E+03 + 0.5923052939944549E+03 + 0.5910672654400710E+03 + 0.5898316544847339E+03 + 0.5885984584572249E+03 + 0.5873676746521885E+03 + 0.5861393004034688E+03 + 0.5849133329788961E+03 + 0.5836897696340083E+03 + 0.5824686077316350E+03 + 0.5812498445824978E+03 + 0.5800334774510145E+03 + 0.5788195036257938E+03 + 0.5776079203319865E+03 + 0.5763987247613885E+03 + 0.5751919141797630E+03 + 0.5739874858018927E+03 + 0.5727854367989710E+03 + 0.5715857643931663E+03 + 0.5703884657542876E+03 + 0.5691935379991279E+03 + 0.5680009782700668E+03 + 0.5668107836543305E+03 + 0.5656229512163882E+03 + 0.5644374781808721E+03 + 0.5632543617558681E+03 + 0.5620735990752889E+03 + 0.5608951872159498E+03 + 0.5597191231820619E+03 + 0.5585454039406558E+03 + 0.5573740265890189E+03 + 0.5562049882119943E+03 + 0.5550382858367996E+03 + 0.5538739165229321E+03 + 0.5527118772904222E+03 + 0.5515521651042111E+03 + 0.5503947769843741E+03 + 0.5492397099240720E+03 + 0.5480869608608399E+03 + 0.5469365267921708E+03 + 0.5457884046956318E+03 + 0.5446425914902233E+03 + 0.5434990841414051E+03 + 0.5423578795941166E+03 + 0.5412189747345907E+03 + 0.5400823665011093E+03 + 0.5389480518193900E+03 + 0.5378160275549462E+03 + 0.5366862906177249E+03 + 0.5355588379068383E+03 + 0.5344336662609172E+03 + 0.5333107725650060E+03 + 0.5321901537002062E+03 + 0.5310718064860131E+03 + 0.5299557277788624E+03 + 0.5288419144314875E+03 + 0.5277303632351591E+03 + 0.5266210710218106E+03 + 0.5255140346282485E+03 + 0.5244092508297154E+03 + 0.5233067164391056E+03 + 0.5222064282785875E+03 + 0.5211083831078636E+03 + 0.5200125777066589E+03 + 0.5189190088567118E+03 + 0.5178276732788145E+03 + 0.5167385677395888E+03 + 0.5156516890361190E+03 + 0.5145670339038230E+03 + 0.5134845990832710E+03 + 0.5124043813156605E+03 + 0.5113263772813894E+03 + 0.5102505836993321E+03 + 0.5091769973285849E+03 + 0.5081056148684809E+03 + 0.5070364330216921E+03 + 0.5059694485013313E+03 + 0.5049046579607442E+03 + 0.5038420580777150E+03 + 0.5027816455719702E+03 + 0.5017234171055681E+03 + 0.5006673693440061E+03 + 0.4996134989764269E+03 + 0.4985618026343805E+03 + 0.4975122769616360E+03 + 0.4964649186451683E+03 + 0.4954197243166283E+03 + 0.4943766906042640E+03 + 0.4933358141645807E+03 + 0.4922970915989839E+03 + 0.4912605195175951E+03 + 0.4902260945862915E+03 + 0.4891938134195208E+03 + 0.4881636726188771E+03 + 0.4871356688127949E+03 + 0.4861097985769924E+03 + 0.4850860584875275E+03 + 0.4840644451802946E+03 + 0.4830449552436949E+03 + 0.4820275852517563E+03 + 0.4810123318171551E+03 + 0.4799991915042974E+03 + 0.4789881608656420E+03 + 0.4779792365061021E+03 + 0.4769724149860575E+03 + 0.4759676928499030E+03 + 0.4749650666936378E+03 + 0.4739645330706911E+03 + 0.4729660885137899E+03 + 0.4719697296035063E+03 + 0.4709754528793969E+03 + 0.4699832548616274E+03 + 0.4689931321309933E+03 + 0.4680050812319818E+03 + 0.4670190986810973E+03 + 0.4660351810370179E+03 + 0.4650533248209351E+03 + 0.4640735265291780E+03 + 0.4630957827196936E+03 + 0.4621200899198167E+03 + 0.4611464446277320E+03 + 0.4601748433958863E+03 + 0.4592052827473420E+03 + 0.4582377591717477E+03 + 0.4572722692032981E+03 + 0.4563088093472163E+03 + 0.4553473760769998E+03 + 0.4543879659264563E+03 + 0.4534305754081586E+03 + 0.4524752010000266E+03 + 0.4515218392336881E+03 + 0.4505704866210614E+03 + 0.4496211396355302E+03 + 0.4486737947898336E+03 + 0.4477284485755508E+03 + 0.4467850974478336E+03 + 0.4458437379209829E+03 + 0.4449043664993021E+03 + 0.4439669796474482E+03 + 0.4430315738743066E+03 + 0.4420981456767704E+03 + 0.4411666915115889E+03 + 0.4402372078820418E+03 + 0.4393096912845116E+03 + 0.4383841381736926E+03 + 0.4374605450432814E+03 + 0.4365389083806301E+03 + 0.4356192246323395E+03 + 0.4347014902973739E+03 + 0.4337857018799818E+03 + 0.4328718558406189E+03 + 0.4319599486639803E+03 + 0.4310499768284430E+03 + 0.4301419367705432E+03 + 0.4292358249775614E+03 + 0.4283316379516634E+03 + 0.4274293721514540E+03 + 0.4265290240622043E+03 + 0.4256305901729150E+03 + 0.4247340669292735E+03 + 0.4238394508101192E+03 + 0.4229467383076354E+03 + 0.4220559258706746E+03 + 0.4211670099759250E+03 + 0.4202799871144200E+03 + 0.4193948537342857E+03 + 0.4185116063150117E+03 + 0.4176302413589626E+03 + 0.4167507553255607E+03 + 0.4158731446920307E+03 + 0.4149974059513243E+03 + 0.4141235355537637E+03 + 0.4132515299718039E+03 + 0.4123813857034763E+03 + 0.4115130992049985E+03 + 0.4106466669511478E+03 + 0.4097820854442679E+03 + 0.4089193511455253E+03 + 0.4080584605316445E+03 + 0.4071994101093630E+03 + 0.4063421963450060E+03 + 0.4054868157164948E+03 + 0.4046332647327626E+03 + 0.4037815398630828E+03 + 0.4029316375822575E+03 + 0.4020835543936385E+03 + 0.4012372867617429E+03 + 0.4003928311652883E+03 + 0.3995501841312210E+03 + 0.3987093421500885E+03 + 0.3978703017059618E+03 + 0.3970330593035644E+03 + 0.3961976114098484E+03 + 0.3953639545006797E+03 + 0.3945320851064386E+03 + 0.3937019997243640E+03 + 0.3928736948482585E+03 + 0.3920471670096962E+03 + 0.3912224127065366E+03 + 0.3903994284281650E+03 + 0.3895782106974339E+03 + 0.3887587560042540E+03 + 0.3879410608363556E+03 + 0.3871251217363370E+03 + 0.3863109352183914E+03 + 0.3854984977854260E+03 + 0.3846878059795998E+03 + 0.3838788563139205E+03 + 0.3830716452900373E+03 + 0.3822661694554531E+03 + 0.3814624253313387E+03 + 0.3806604094248657E+03 + 0.3798601182881448E+03 + 0.3790615484486443E+03 + 0.3782646964193230E+03 + 0.3774695587635234E+03 + 0.3766761320230951E+03 + 0.3758844127196688E+03 + 0.3750943974114516E+03 + 0.3743060826341074E+03 + 0.3735194649081342E+03 + 0.3727345408175828E+03 + 0.3719513069329958E+03 + 0.3711697597985474E+03 + 0.3703898959798596E+03 + 0.3696117120199937E+03 + 0.3688352044445106E+03 + 0.3680603698488849E+03 + 0.3672872048229663E+03 + 0.3665157059292131E+03 + 0.3657458697547425E+03 + 0.3649776928691905E+03 + 0.3642111718187153E+03 + 0.3634463032020712E+03 + 0.3626830836131129E+03 + 0.3619215096195412E+03 + 0.3611615778305346E+03 + 0.3604032848492300E+03 + 0.3596466272512643E+03 + 0.3588916016494202E+03 + 0.3581382046516611E+03 + 0.3573864328386505E+03 + 0.3566362828344985E+03 + 0.3558877512646720E+03 + 0.3551408347250205E+03 + 0.3543955298389196E+03 + 0.3536518332263925E+03 + 0.3529097414800100E+03 + 0.3521692512446292E+03 + 0.3514303591789086E+03 + 0.3506930619105378E+03 + 0.3499573560835315E+03 + 0.3492232383380453E+03 + 0.3484907052850255E+03 + 0.3477597535772561E+03 + 0.3470303798836023E+03 + 0.3463025808428205E+03 + 0.3455763531207672E+03 + 0.3448516933932008E+03 + 0.3441285983057101E+03 + 0.3434070645318095E+03 + 0.3426870887594575E+03 + 0.3419686676463111E+03 + 0.3412517978723869E+03 + 0.3405364761316053E+03 + 0.3398226990879542E+03 + 0.3391104634321679E+03 + 0.3383997658770219E+03 + 0.3376906031055968E+03 + 0.3369829718211138E+03 + 0.3362768687469296E+03 + 0.3355722905768694E+03 + 0.3348692340224226E+03 + 0.3341676958170094E+03 + 0.3334676726649699E+03 + 0.3327691612873513E+03 + 0.3320721584305857E+03 + 0.3313766608125775E+03 + 0.3306826651638517E+03 + 0.3299901682399410E+03 + 0.3292991667683808E+03 + 0.3286096574895086E+03 + 0.3279216371736673E+03 + 0.3272351025641538E+03 + 0.3265500504156433E+03 + 0.3258664775158182E+03 + 0.3251843806262013E+03 + 0.3245037565143933E+03 + 0.3238246019777496E+03 + 0.3231469137879160E+03 + 0.3224706887179088E+03 + 0.3217959235672773E+03 + 0.3211226151104150E+03 + 0.3204507601308351E+03 + 0.3197803554582021E+03 + 0.3191113979000598E+03 + 0.3184438842613282E+03 + 0.3177778113750219E+03 + 0.3171131760509182E+03 + 0.3164499750970669E+03 + 0.3157882053565502E+03 + 0.3151278636511694E+03 + 0.3144689468028078E+03 + 0.3138114516783286E+03 + 0.3131553751260022E+03 + 0.3125007139849510E+03 + 0.3118474651206513E+03 + 0.3111956253782266E+03 + 0.3105451915998588E+03 + 0.3098961606771300E+03 + 0.3092485294867134E+03 + 0.3086022948952288E+03 + 0.3079574538023505E+03 + 0.3073140030911908E+03 + 0.3066719396354753E+03 + 0.3060312603495588E+03 + 0.3053919621343729E+03 + 0.3047540418776271E+03 + 0.3041174964985561E+03 + 0.3034823229024560E+03 + 0.3028485179854650E+03 + 0.3022160786974403E+03 + 0.3015850019818799E+03 + 0.3009552847640692E+03 + 0.3003269239873436E+03 + 0.2996999165805266E+03 + 0.2990742594611728E+03 + 0.2984499496040170E+03 + 0.2978269839833093E+03 + 0.2972053595541459E+03 + 0.2965850732909770E+03 + 0.2959661221572478E+03 + 0.2953485031014512E+03 + 0.2947322131208748E+03 + 0.2941172492147674E+03 + 0.2935036083636435E+03 + 0.2928912875764417E+03 + 0.2922802838583780E+03 + 0.2916705941953523E+03 + 0.2910622156011804E+03 + 0.2904551450879406E+03 + 0.2898493796502560E+03 + 0.2892449163295079E+03 + 0.2886417521770424E+03 + 0.2880398842231431E+03 + 0.2874393095155303E+03 + 0.2868400250993754E+03 + 0.2862420280001065E+03 + 0.2856453152771874E+03 + 0.2850498839993987E+03 + 0.2844557312152523E+03 + 0.2838628540026422E+03 + 0.2832712494489288E+03 + 0.2826809146207921E+03 + 0.2820918466108135E+03 + 0.2815040425216873E+03 + 0.2809174994349702E+03 + 0.2803322144523283E+03 + 0.2797481846842431E+03 + 0.2791654072207109E+03 + 0.2785838791827000E+03 + 0.2780035977116886E+03 + 0.2774245599280130E+03 + 0.2768467629642048E+03 + 0.2762702039605916E+03 + 0.2756948800368262E+03 + 0.2751207883398895E+03 + 0.2745479260416705E+03 + 0.2739762902934820E+03 + 0.2734058782566191E+03 + 0.2728366871034480E+03 + 0.2722687139859653E+03 + 0.2717019560813693E+03 + 0.2711364105978269E+03 + 0.2705720747237868E+03 + 0.2700089456511033E+03 + 0.2694470205806878E+03 + 0.2688862966933774E+03 + 0.2683267711939560E+03 + 0.2677684413258857E+03 + 0.2672113043143347E+03 + 0.2666553573809521E+03 + 0.2661005977520481E+03 + 0.2655470226341071E+03 + 0.2649946292584437E+03 + 0.2644434149070479E+03 + 0.2638933768459958E+03 + 0.2633445123339773E+03 + 0.2627968186324002E+03 + 0.2622502929832067E+03 + 0.2617049326426681E+03 + 0.2611607349113744E+03 + 0.2606176970752021E+03 + 0.2600758164207410E+03 + 0.2595350902574494E+03 + 0.2589955158784467E+03 + 0.2584570905768493E+03 + 0.2579198116708199E+03 + 0.2573836764631928E+03 + 0.2568486822641439E+03 + 0.2563148264300454E+03 + 0.2557821063057769E+03 + 0.2552505192263024E+03 + 0.2547200625342529E+03 + 0.2541907335557801E+03 + 0.2536625296221064E+03 + 0.2531354481164945E+03 + 0.2526094864141176E+03 + 0.2520846418811745E+03 + 0.2515609118990971E+03 + 0.2510382938355784E+03 + 0.2505167850578567E+03 + 0.2499963829799899E+03 + 0.2494770850097946E+03 + 0.2489588885447802E+03 + 0.2484417909987745E+03 + 0.2479257897738465E+03 + 0.2474108822677643E+03 + 0.2468970659218369E+03 + 0.2463843381734718E+03 + 0.2458726964499545E+03 + 0.2453621382016361E+03 + 0.2448526608709872E+03 + 0.2443442618920500E+03 + 0.2438369387335724E+03 + 0.2433306888612301E+03 + 0.2428255097308557E+03 + 0.2423213988297567E+03 + 0.2418183536427974E+03 + 0.2413163716426427E+03 + 0.2408154503236025E+03 + 0.2403155871756696E+03 + 0.2398167796792003E+03 + 0.2393190253556978E+03 + 0.2388223217315754E+03 + 0.2383266663193407E+03 + 0.2378320566467234E+03 + 0.2373384902374262E+03 + 0.2368459646031362E+03 + 0.2363544772880074E+03 + 0.2358640258417059E+03 + 0.2353746078011377E+03 + 0.2348862207322298E+03 + 0.2343988622068846E+03 + 0.2339125297832639E+03 + 0.2334272210419613E+03 + 0.2329429335680767E+03 + 0.2324596649323017E+03 + 0.2319774127228874E+03 + 0.2314961745316613E+03 + 0.2310159479368783E+03 + 0.2305367305459320E+03 + 0.2300585199793112E+03 + 0.2295813138434511E+03 + 0.2291051097672391E+03 + 0.2286299053905605E+03 + 0.2281556983385786E+03 + 0.2276824862500392E+03 + 0.2272102667702675E+03 + 0.2267390375302810E+03 + 0.2262687961831566E+03 + 0.2257995403976843E+03 + 0.2253312678284725E+03 + 0.2248639761486995E+03 + 0.2243976630468507E+03 + 0.2239323261969371E+03 + 0.2234679632827353E+03 + 0.2230045719973566E+03 + 0.2225421500199387E+03 + 0.2220806950544553E+03 + 0.2216202048324373E+03 + 0.2211606770716647E+03 + 0.2207021094901959E+03 + 0.2202444998089447E+03 + 0.2197878457346281E+03 + 0.2193321449958302E+03 + 0.2188773953525697E+03 + 0.2184235945522849E+03 + 0.2179707403484701E+03 + 0.2175188305085453E+03 + 0.2170678627865331E+03 + 0.2166178349423657E+03 + 0.2161687447521499E+03 + 0.2157205899792338E+03 + 0.2152733684018775E+03 + 0.2148270778315146E+03 + 0.2143817160685502E+03 + 0.2139372809125246E+03 + 0.2134937701728644E+03 + 0.2130511816463079E+03 + 0.2126095131391681E+03 + 0.2121687624894001E+03 + 0.2117289275250116E+03 + 0.2112900060743519E+03 + 0.2108519959824264E+03 + 0.2104148950831241E+03 + 0.2099787012147440E+03 + 0.2095434122439803E+03 + 0.2091090260285214E+03 + 0.2086755404272416E+03 + 0.2082429533232329E+03 + 0.2078112625906759E+03 + 0.2073804661032099E+03 + 0.2069505617574215E+03 + 0.2065215474414780E+03 + 0.2060934210427465E+03 + 0.2056661804739908E+03 + 0.2052398236407323E+03 + 0.2048143484451311E+03 + 0.2043897528100255E+03 + 0.2039660346508914E+03 + 0.2035431918846946E+03 + 0.2031212224689280E+03 + 0.2027001243588725E+03 + 0.2022798955004699E+03 + 0.2018605338435843E+03 + 0.2014420373283544E+03 + 0.2010244038933040E+03 + 0.2006076315146397E+03 + 0.2001917181682172E+03 + 0.1997766618243446E+03 + 0.1993624604772541E+03 + 0.1989491121182905E+03 + 0.1985366147322992E+03 + 0.1981249663263212E+03 + 0.1977141649050904E+03 + 0.1973042084657984E+03 + 0.1968950950249104E+03 + 0.1964868225967270E+03 + 0.1960793891897137E+03 + 0.1956727928445056E+03 + 0.1952670316055640E+03 + 0.1948621035088559E+03 + 0.1944580066081763E+03 + 0.1940547389569128E+03 + 0.1936522985991902E+03 + 0.1932506835936216E+03 + 0.1928498919981293E+03 + 0.1924499218642630E+03 + 0.1920507712834267E+03 + 0.1916524383598810E+03 + 0.1912549211863683E+03 + 0.1908582178521089E+03 + 0.1904623264384950E+03 + 0.1900672450197044E+03 + 0.1896729717112493E+03 + 0.1892795046471484E+03 + 0.1888868419505238E+03 + 0.1884949817450560E+03 + 0.1881039221501333E+03 + 0.1877136612763052E+03 + 0.1873241972641697E+03 + 0.1869355282707968E+03 + 0.1865476524433053E+03 + 0.1861605679401804E+03 + 0.1857742729250876E+03 + 0.1853887655515828E+03 + 0.1850040439857358E+03 + 0.1846201064011917E+03 + 0.1842369509620761E+03 + 0.1838545758543455E+03 + 0.1834729792812505E+03 + 0.1830921594361871E+03 + 0.1827121145206143E+03 + 0.1823328427428179E+03 + 0.1819543423011353E+03 + 0.1815766114061783E+03 + 0.1811996482812069E+03 + 0.1808234511399145E+03 + 0.1804480182091723E+03 + 0.1800733477315027E+03 + 0.1796994379400509E+03 + 0.1793262870773436E+03 + 0.1789538933992745E+03 + 0.1785822551524566E+03 + 0.1782113705938958E+03 + 0.1778412379973081E+03 + 0.1774718556274534E+03 + 0.1771032217543522E+03 + 0.1767353346598502E+03 + 0.1763681926168569E+03 + 0.1760017939103359E+03 + 0.1756361368492821E+03 + 0.1752712197348631E+03 + 0.1749070408679136E+03 + 0.1745435985557779E+03 + 0.1741808910968302E+03 + 0.1738189167996019E+03 + 0.1734576739993584E+03 + 0.1730971610246857E+03 + 0.1727373762055195E+03 + 0.1723783178845106E+03 + 0.1720199843965107E+03 + 0.1716623740797818E+03 + 0.1713054852916235E+03 + 0.1709493163827077E+03 + 0.1705938657081814E+03 + 0.1702391316471806E+03 + 0.1698851125733806E+03 + 0.1695318068596174E+03 + 0.1691792128922542E+03 + 0.1688273290511336E+03 + 0.1684761537160929E+03 + 0.1681256852848214E+03 + 0.1677759221496743E+03 + 0.1674268627050519E+03 + 0.1670785053717725E+03 + 0.1667308485674994E+03 + 0.1663838907075848E+03 + 0.1660376302225984E+03 + 0.1656920655383930E+03 + 0.1653471950781854E+03 + 0.1650030172813968E+03 + 0.1646595305835288E+03 + 0.1643167334191711E+03 + 0.1639746242481476E+03 + 0.1636332015292560E+03 + 0.1632924637172725E+03 + 0.1629524092816689E+03 + 0.1626130366889343E+03 + 0.1622743444029123E+03 + 0.1619363309106960E+03 + 0.1615989946996493E+03 + 0.1612623342519379E+03 + 0.1609263480623309E+03 + 0.1605910346233874E+03 + 0.1602563924236651E+03 + 0.1599224199729446E+03 + 0.1595891157826035E+03 + 0.1592564783597503E+03 + 0.1589245062333978E+03 + 0.1585931979354970E+03 + 0.1582625519916390E+03 + 0.1579325669371793E+03 + 0.1576032413064063E+03 + 0.1572745736283103E+03 + 0.1569465624512017E+03 + 0.1566192063275188E+03 + 0.1562925038037847E+03 + 0.1559664534424467E+03 + 0.1556410538095802E+03 + 0.1553163034654000E+03 + 0.1549922009881900E+03 + 0.1546687449621793E+03 + 0.1543459339648927E+03 + 0.1540237665845373E+03 + 0.1537022414121766E+03 + 0.1533813570322220E+03 + 0.1530611120417304E+03 + 0.1527415050429027E+03 + 0.1524225346318583E+03 + 0.1521041994252617E+03 + 0.1517864980516625E+03 + 0.1514694291326147E+03 + 0.1511529912959632E+03 + 0.1508371831723335E+03 + 0.1505220033853649E+03 + 0.1502074505683560E+03 + 0.1498935233611147E+03 + 0.1495802203969748E+03 + 0.1492675403265494E+03 + 0.1489554818150173E+03 + 0.1486440435210617E+03 + 0.1483332241136980E+03 + 0.1480230222716839E+03 + 0.1477134366667050E+03 + 0.1474044659687764E+03 + 0.1470961088465531E+03 + 0.1467883639619816E+03 + 0.1464812299980791E+03 + 0.1461747056628823E+03 + 0.1458687896586156E+03 + 0.1455634806892205E+03 + 0.1452587774625652E+03 + 0.1449546786798540E+03 + 0.1446511830520304E+03 + 0.1443482893056318E+03 + 0.1440459961612837E+03 + 0.1437443023408980E+03 + 0.1434432065716839E+03 + 0.1431427075744624E+03 + 0.1428428040780369E+03 + 0.1425434948280902E+03 + 0.1422447785650859E+03 + 0.1419466540374838E+03 + 0.1416491200126764E+03 + 0.1413521752532343E+03 + 0.1410558185197705E+03 + 0.1407600485756102E+03 + 0.1404648641778751E+03 + 0.1401702640908113E+03 + 0.1398762471005113E+03 + 0.1395828119893184E+03 + 0.1392899575417886E+03 + 0.1389976825560200E+03 + 0.1387059858256666E+03 + 0.1384148661424861E+03 + 0.1381243223037257E+03 + 0.1378343531013420E+03 + 0.1375449573319203E+03 + 0.1372561338156402E+03 + 0.1369678813705668E+03 + 0.1366801988147769E+03 + 0.1363930849794232E+03 + 0.1361065386922289E+03 + 0.1358205587803687E+03 + 0.1355351440840805E+03 + 0.1352502934405741E+03 + 0.1349660056857830E+03 + 0.1346822796679490E+03 + 0.1343991142325560E+03 + 0.1341165082245476E+03 + 0.1338344605055875E+03 + 0.1335529699360700E+03 + 0.1332720353747739E+03 + 0.1329916556948000E+03 + 0.1327118297679498E+03 + 0.1324325564653401E+03 + 0.1321538346783698E+03 + 0.1318756632993993E+03 + 0.1315980412153999E+03 + 0.1313209673126624E+03 + 0.1310444404727228E+03 + 0.1307684595760917E+03 + 0.1304930235266980E+03 + 0.1302181312320779E+03 + 0.1299437815968568E+03 + 0.1296699735402602E+03 + 0.1293967059828601E+03 + 0.1291239778416703E+03 + 0.1288517880457347E+03 + 0.1285801355251607E+03 + 0.1283090192051903E+03 + 0.1280384380150733E+03 + 0.1277683908822946E+03 + 0.1274988767319348E+03 + 0.1272298945134895E+03 + 0.1269614431849116E+03 + 0.1266935216988963E+03 + 0.1264261290091699E+03 + 0.1261592640670525E+03 + 0.1258929258206415E+03 + 0.1256271132400755E+03 + 0.1253618253053507E+03 + 0.1250970609908844E+03 + 0.1248328192680136E+03 + 0.1245690991038624E+03 + 0.1243058994621881E+03 + 0.1240432193326225E+03 + 0.1237810577201112E+03 + 0.1235194136239816E+03 + 0.1232582860361141E+03 + 0.1229976739413700E+03 + 0.1227375763207238E+03 + 0.1224779921805137E+03 + 0.1222189205457588E+03 + 0.1219603604362729E+03 + 0.1217023108643936E+03 + 0.1214447708352370E+03 + 0.1211877393495702E+03 + 0.1209312154315581E+03 + 0.1206751981265103E+03 + 0.1204196864750543E+03 + 0.1201646795111512E+03 + 0.1199101762620963E+03 + 0.1196561757504405E+03 + 0.1194026770180204E+03 + 0.1191496791280160E+03 + 0.1188971811393417E+03 + 0.1186451821027572E+03 + 0.1183936810604106E+03 + 0.1181426770493543E+03 + 0.1178921691235386E+03 + 0.1176421563598851E+03 + 0.1173926378319409E+03 + 0.1171436126169608E+03 + 0.1168950797993483E+03 + 0.1166470384590736E+03 + 0.1163994876715607E+03 + 0.1161524265080875E+03 + 0.1159058540349585E+03 + 0.1156597693320616E+03 + 0.1154141715046349E+03 + 0.1151690596555450E+03 + 0.1149244328886644E+03 + 0.1146802903136198E+03 + 0.1144366310359577E+03 + 0.1141934541560203E+03 + 0.1139507587689345E+03 + 0.1137085439647581E+03 + 0.1134668088481359E+03 + 0.1132255525597194E+03 + 0.1129847742402263E+03 + 0.1127444730221910E+03 + 0.1125046480259791E+03 + 0.1122652983659405E+03 + 0.1120264231623316E+03 + 0.1117880215574995E+03 + 0.1115500926929321E+03 + 0.1113126357079929E+03 + 0.1110756497447659E+03 + 0.1108391339416771E+03 + 0.1106030874406211E+03 + 0.1103675094034047E+03 + 0.1101323989915217E+03 + 0.1098977553630417E+03 + 0.1096635776758205E+03 + 0.1094298650838014E+03 + 0.1091966167437148E+03 + 0.1089638318344749E+03 + 0.1087315095361966E+03 + 0.1084996490244469E+03 + 0.1082682494708460E+03 + 0.1080373100424557E+03 + 0.1078068299078552E+03 + 0.1075768082575515E+03 + 0.1073472442844576E+03 + 0.1071181371782445E+03 + 0.1068894861305581E+03 + 0.1066612903303297E+03 + 0.1064335489653601E+03 + 0.1062062612367868E+03 + 0.1059794263468840E+03 + 0.1057530434970226E+03 + 0.1055271119046594E+03 + 0.1053016307899315E+03 + 0.1050765993681710E+03 + 0.1048520168483511E+03 + 0.1046278824342233E+03 + 0.1044041953292039E+03 + 0.1041809547606570E+03 + 0.1039581599633444E+03 + 0.1037358101674326E+03 + 0.1035139045970759E+03 + 0.1032924424712815E+03 + 0.1030714230085116E+03 + 0.1028508454550041E+03 + 0.1026307090685609E+03 + 0.1024110131020615E+03 + 0.1021917567974546E+03 + 0.1019729393888012E+03 + 0.1017545601078220E+03 + 0.1015366182026082E+03 + 0.1013191129290613E+03 + 0.1011020435400418E+03 + 0.1008854092962878E+03 + 0.1006692094620084E+03 + 0.1004534432979234E+03 + 0.1002381100682180E+03 + 0.1000232090381680E+03 + 0.9980873946982248E+02 + 0.9959470063326332E+02 + 0.9938109180353837E+02 + 0.9916791225239905E+02 + 0.9895516125749634E+02 + 0.9874283810049384E+02 + 0.9853094205967776E+02 + 0.9831947241815450E+02 + 0.9810842846277647E+02 + 0.9789780947708518E+02 + 0.9768761475069881E+02 + 0.9747784357883145E+02 + 0.9726849525338405E+02 + 0.9705956906996531E+02 + 0.9685106432814048E+02 + 0.9664298032417233E+02 + 0.9643531635917250E+02 + 0.9622807174013904E+02 + 0.9602124577088443E+02 + 0.9581483775906506E+02 + 0.9560884701782112E+02 + 0.9540327285713120E+02 + 0.9519811458995957E+02 + 0.9499337153440746E+02 + 0.9478904300548032E+02 + 0.9458512832182991E+02 + 0.9438162680892724E+02 + 0.9417853778933005E+02 + 0.9397586058742871E+02 + 0.9377359453251769E+02 + 0.9357173895094044E+02 + 0.9337029317221047E+02 + 0.9316925653371482E+02 + 0.9296862837025157E+02 + 0.9276840801763137E+02 + 0.9256859481658015E+02 + 0.9236918810506833E+02 + 0.9217018722304954E+02 + 0.9197159151804354E+02 + 0.9177340033523944E+02 + 0.9157561302044536E+02 + 0.9137822892505160E+02 + 0.9118124739802161E+02 + 0.9098466778970452E+02 + 0.9078848945861938E+02 + 0.9059271176137639E+02 + 0.9039733405447691E+02 + 0.9020235569977425E+02 + 0.9000777605696186E+02 + 0.8981359448630595E+02 + 0.8961981035611323E+02 + 0.8942642303316399E+02 + 0.8923343188364983E+02 + 0.8904083627925157E+02 + 0.8884863558985781E+02 + 0.8865682918527300E+02 + 0.8846541644326840E+02 + 0.8827439674053768E+02 + 0.8808376945281606E+02 + 0.8789353396160283E+02 + 0.8770368964706708E+02 + 0.8751423588843991E+02 + 0.8732517207159472E+02 + 0.8713649758152386E+02 + 0.8694821180221041E+02 + 0.8676031412482904E+02 + 0.8657280394009281E+02 + 0.8638568063723531E+02 + 0.8619894361129876E+02 + 0.8601259225674637E+02 + 0.8582662596651163E+02 + 0.8564104413984209E+02 + 0.8545584617585486E+02 + 0.8527103147187208E+02 + 0.8508659943077481E+02 + 0.8490254945535699E+02 + 0.8471888094662637E+02 + 0.8453559331191764E+02 + 0.8435268595909842E+02 + 0.8417015829396830E+02 + 0.8398800972742004E+02 + 0.8380623967070619E+02 + 0.8362484753302573E+02 + 0.8344383272942190E+02 + 0.8326319467598937E+02 + 0.8308293278658499E+02 + 0.8290304647995421E+02 + 0.8272353517579697E+02 + 0.8254439829146843E+02 + 0.8236563524876237E+02 + 0.8218724547054789E+02 + 0.8200922837735782E+02 + 0.8183158339472622E+02 + 0.8165430994997936E+02 + 0.8147740746796802E+02 + 0.8130087537724964E+02 + 0.8112471310775509E+02 + 0.8094892008698517E+02 + 0.8077349574715390E+02 + 0.8059843952295233E+02 + 0.8042375084656636E+02 + 0.8024942915373066E+02 + 0.8007547388223011E+02 + 0.7990188446726452E+02 + 0.7972866034645975E+02 + 0.7955580095898526E+02 + 0.7938330574152055E+02 + 0.7921117413523297E+02 + 0.7903940558508722E+02 + 0.7886799953353778E+02 + 0.7869695542519111E+02 + 0.7852627270672083E+02 + 0.7835595082226386E+02 + 0.7818598921855678E+02 + 0.7801638734530107E+02 + 0.7784714464970567E+02 + 0.7767826058091580E+02 + 0.7750973459076370E+02 + 0.7734156612863879E+02 + 0.7717375464686853E+02 + 0.7700629960218473E+02 + 0.7683920044896702E+02 + 0.7667245664204697E+02 + 0.7650606763789746E+02 + 0.7634003289053979E+02 + 0.7617435185637964E+02 + 0.7600902399667605E+02 + 0.7584404877050977E+02 + 0.7567942563748825E+02 + 0.7551515405975117E+02 + 0.7535123349714209E+02 + 0.7518766341089069E+02 + 0.7502444326669868E+02 + 0.7486157252821803E+02 + 0.7469905065935156E+02 + 0.7453687712694604E+02 + 0.7437505139572114E+02 + 0.7421357293089089E+02 + 0.7405244120159618E+02 + 0.7389165567505094E+02 + 0.7373121581871244E+02 + 0.7357112110397982E+02 + 0.7341137100042455E+02 + 0.7325196497755522E+02 + 0.7309290250864856E+02 + 0.7293418306523446E+02 + 0.7277580611855957E+02 + 0.7261777114361611E+02 + 0.7246007761375735E+02 + 0.7230272500166019E+02 + 0.7214571278317182E+02 + 0.7198904043251454E+02 + 0.7183270742350642E+02 + 0.7167671323450874E+02 + 0.7152105734265068E+02 + 0.7136573922409258E+02 + 0.7121075835820869E+02 + 0.7105611422300473E+02 + 0.7090180629569605E+02 + 0.7074783405791077E+02 + 0.7059419699033191E+02 + 0.7044089457194436E+02 + 0.7028792628296158E+02 + 0.7013529160199082E+02 + 0.6998299000704191E+02 + 0.6983102098272612E+02 + 0.6967938401370233E+02 + 0.6952807858276572E+02 + 0.6937710417372874E+02 + 0.6922646026895986E+02 + 0.6907614634940630E+02 + 0.6892616189977927E+02 + 0.6877650640440572E+02 + 0.6862717934596995E+02 + 0.6847818021009508E+02 + 0.6832950848192287E+02 + 0.6818116364494148E+02 + 0.6803314518594507E+02 + 0.6788545259159757E+02 + 0.6773808534672043E+02 + 0.6759104293851742E+02 + 0.6744432485387205E+02 + 0.6729793057777393E+02 + 0.6715185959755080E+02 + 0.6700611140039183E+02 + 0.6686068547163025E+02 + 0.6671558129962274E+02 + 0.6657079837316695E+02 + 0.6642633617900414E+02 + 0.6628219420524279E+02 + 0.6613837193973666E+02 + 0.6599486886835476E+02 + 0.6585168447943833E+02 + 0.6570881826196006E+02 + 0.6556626970285777E+02 + 0.6542403829104839E+02 + 0.6528212351601449E+02 + 0.6514052486511288E+02 + 0.6499924182662689E+02 + 0.6485827388888569E+02 + 0.6471762053816435E+02 + 0.6457728126304377E+02 + 0.6443725555346131E+02 + 0.6429754289726249E+02 + 0.6415814278341068E+02 + 0.6401905470151624E+02 + 0.6388027813903079E+02 + 0.6374181258350419E+02 + 0.6360365752242950E+02 + 0.6346581244121331E+02 + 0.6332827682745653E+02 + 0.6319105017102474E+02 + 0.6305413195972751E+02 + 0.6291752168144338E+02 + 0.6278121882436319E+02 + 0.6264522287455109E+02 + 0.6250953331824058E+02 + 0.6237414964231468E+02 + 0.6223907133159207E+02 + 0.6210429787202730E+02 + 0.6196982875172044E+02 + 0.6183566345679627E+02 + 0.6170180147303343E+02 + 0.6156824228665210E+02 + 0.6143498538181395E+02 + 0.6130203024266295E+02 + 0.6116937635451026E+02 + 0.6103702320070206E+02 + 0.6090497026495012E+02 + 0.6077321703305426E+02 + 0.6064176298895689E+02 + 0.6051060761542117E+02 + 0.6037975039490063E+02 + 0.6024919080780445E+02 + 0.6011892833507481E+02 + 0.5998896246084127E+02 + 0.5985929266761157E+02 + 0.5972991843650707E+02 + 0.5960083924823184E+02 + 0.5947205458148306E+02 + 0.5934356391448253E+02 + 0.5921536672729920E+02 + 0.5908746249834413E+02 + 0.5895985070528784E+02 + 0.5883253082732963E+02 + 0.5870550234202785E+02 + 0.5857876472585368E+02 + 0.5845231745618025E+02 + 0.5832616000869817E+02 + 0.5820029185790867E+02 + 0.5807471247918488E+02 + 0.5794942134627011E+02 + 0.5782441793195216E+02 + 0.5769970171092841E+02 + 0.5757527215654520E+02 + 0.5745112874046406E+02 + 0.5732727093398663E+02 + 0.5720369820663840E+02 + 0.5708041002704419E+02 + 0.5695740586673622E+02 + 0.5683468519632785E+02 + 0.5671224748449611E+02 + 0.5659009219877515E+02 + 0.5646821880480626E+02 + 0.5634662676691385E+02 + 0.5622531555131246E+02 + 0.5610428462325914E+02 + 0.5598353344635149E+02 + 0.5586306148463219E+02 + 0.5574286820083717E+02 + 0.5562295305618812E+02 + 0.5550331551340809E+02 + 0.5538395503437371E+02 + 0.5526487107894898E+02 + 0.5514606310565818E+02 + 0.5502753057119689E+02 + 0.5490927293076641E+02 + 0.5479128964189574E+02 + 0.5467358016187717E+02 + 0.5455614394595445E+02 + 0.5443898044778759E+02 + 0.5432208911916176E+02 + 0.5420546941025905E+02 + 0.5408912077353440E+02 + 0.5397304266153792E+02 + 0.5385723452477701E+02 + 0.5374169581212543E+02 + 0.5362642597060899E+02 + 0.5351142444541890E+02 + 0.5339669068247571E+02 + 0.5328222412728297E+02 + 0.5316802422339796E+02 + 0.5305409041381068E+02 + 0.5294042214040243E+02 + 0.5282701884317930E+02 + 0.5271387996269906E+02 + 0.5260100493928344E+02 + 0.5248839321124871E+02 + 0.5237604421545407E+02 + 0.5226395738715149E+02 + 0.5215213215970495E+02 + 0.5204056796745312E+02 + 0.5192926424517312E+02 + 0.5181822042559984E+02 + 0.5170743593856565E+02 + 0.5159691021108943E+02 + 0.5148664266827581E+02 + 0.5137663273722437E+02 + 0.5126687984689905E+02 + 0.5115738342434091E+02 + 0.5104814289396954E+02 + 0.5093915767755571E+02 + 0.5083042719484263E+02 + 0.5072195086534340E+02 + 0.5061372810859094E+02 + 0.5050575834220862E+02 + 0.5039804098293907E+02 + 0.5029057544691442E+02 + 0.5018336114830790E+02 + 0.5007639749936501E+02 + 0.4996968391044386E+02 + 0.4986321978991352E+02 + 0.4975700454654346E+02 + 0.4965103759059833E+02 + 0.4954531833056539E+02 + 0.4943984617198471E+02 + 0.4933462051693072E+02 + 0.4922964076533826E+02 + 0.4912490631723491E+02 + 0.4902041657424361E+02 + 0.4891617093630448E+02 + 0.4881216880082188E+02 + 0.4870840956223595E+02 + 0.4860489261286327E+02 + 0.4850161734457228E+02 + 0.4839858315039076E+02 + 0.4829578942170242E+02 + 0.4819323554755713E+02 + 0.4809092091430141E+02 + 0.4798884490616968E+02 + 0.4788700690652151E+02 + 0.4778540629944479E+02 + 0.4768404246741496E+02 + 0.4758291479330271E+02 + 0.4748202266425739E+02 + 0.4738136546644100E+02 + 0.4728094258658992E+02 + 0.4718075341677977E+02 + 0.4708079734840251E+02 + 0.4698107377304923E+02 + 0.4688158208712962E+02 + 0.4678232168640930E+02 + 0.4668329196663026E+02 + 0.4658449232818955E+02 + 0.4648592217094789E+02 + 0.4638758089501467E+02 + 0.4628946790675737E+02 + 0.4619158261253521E+02 + 0.4609392441817730E+02 + 0.4599649273329520E+02 + 0.4589928696705429E+02 + 0.4580230652832320E+02 + 0.4570555083130270E+02 + 0.4560901929033620E+02 + 0.4551271131931097E+02 + 0.4541662633727996E+02 + 0.4532076376359518E+02 + 0.4522512301687414E+02 + 0.4512970351999277E+02 + 0.4503450469603686E+02 + 0.4493952596730647E+02 + 0.4484476676057306E+02 + 0.4475022650309900E+02 + 0.4465590462151409E+02 + 0.4456180054844278E+02 + 0.4446791371784060E+02 + 0.4437424356249931E+02 + 0.4428078951799724E+02 + 0.4418755102012885E+02 + 0.4409452750379169E+02 + 0.4400171840918691E+02 + 0.4390912317812582E+02 + 0.4381674125119889E+02 + 0.4372457207193007E+02 + 0.4363261508452565E+02 + 0.4354086973225325E+02 + 0.4344933546446687E+02 + 0.4335801173321239E+02 + 0.4326689798915568E+02 + 0.4317599368458426E+02 + 0.4308529827211752E+02 + 0.4299481120320942E+02 + 0.4290453193407000E+02 + 0.4281445992351649E+02 + 0.4272459462912053E+02 + 0.4263493551197909E+02 + 0.4254548203527722E+02 + 0.4245623366090506E+02 + 0.4236718985386401E+02 + 0.4227835008123938E+02 + 0.4218971380877068E+02 + 0.4210128050450631E+02 + 0.4201304963821294E+02 + 0.4192502067843913E+02 + 0.4183719309875056E+02 + 0.4174956637721468E+02 + 0.4166213999054568E+02 + 0.4157491341508095E+02 + 0.4148788612678043E+02 + 0.4140105760030494E+02 + 0.4131442731609464E+02 + 0.4122799476098140E+02 + 0.4114175942062546E+02 + 0.4105572078013824E+02 + 0.4096987832426549E+02 + 0.4088423153638759E+02 + 0.4079877990435006E+02 + 0.4071352292210597E+02 + 0.4062846008256763E+02 + 0.4054359087874489E+02 + 0.4045891480437637E+02 + 0.4037443135188358E+02 + 0.4029014001658920E+02 + 0.4020604029892679E+02 + 0.4012213169836907E+02 + 0.4003841371565715E+02 + 0.3995488585454996E+02 + 0.3987154761772109E+02 + 0.3978839850901798E+02 + 0.3970543803552229E+02 + 0.3962266570330522E+02 + 0.3954008101968955E+02 + 0.3945768349578472E+02 + 0.3937547264181016E+02 + 0.3929344796901054E+02 + 0.3921160899239515E+02 + 0.3912995522615201E+02 + 0.3904848618541738E+02 + 0.3896720138936832E+02 + 0.3888610035647579E+02 + 0.3880518260580232E+02 + 0.3872444766004875E+02 + 0.3864389504123508E+02 + 0.3856352427188834E+02 + 0.3848333487838919E+02 + 0.3840332638656164E+02 + 0.3832349832260098E+02 + 0.3824385021662182E+02 + 0.3816438159829255E+02 + 0.3808509199749489E+02 + 0.3800598094799496E+02 + 0.3792704798321231E+02 + 0.3784829263677320E+02 + 0.3776971444663499E+02 + 0.3769131295062267E+02 + 0.3761308768625827E+02 + 0.3753503819392417E+02 + 0.3745716401364462E+02 + 0.3737946468552427E+02 + 0.3730193975453501E+02 + 0.3722458876593630E+02 + 0.3714741126473636E+02 + 0.3707040679980879E+02 + 0.3699357492019095E+02 + 0.3691691517426983E+02 + 0.3684042711270393E+02 + 0.3676411028595804E+02 + 0.3668796424444632E+02 + 0.3661198854453527E+02 + 0.3653618274380585E+02 + 0.3646054639899976E+02 + 0.3638507906855054E+02 + 0.3630978031071985E+02 + 0.3623464968325426E+02 + 0.3615968674805659E+02 + 0.3608489106799922E+02 + 0.3601026220530240E+02 + 0.3593579972574106E+02 + 0.3586150319599981E+02 + 0.3578737218201995E+02 + 0.3571340625292855E+02 + 0.3563960497878177E+02 + 0.3556596792885173E+02 + 0.3549249467555778E+02 + 0.3541918479242804E+02 + 0.3534603785218446E+02 + 0.3527305343077128E+02 + 0.3520023110549829E+02 + 0.3512757045278055E+02 + 0.3505507105151781E+02 + 0.3498273248173536E+02 + 0.3491055432260112E+02 + 0.3483853615649454E+02 + 0.3476667756762836E+02 + 0.3469497813927470E+02 + 0.3462343745676852E+02 + 0.3455205510668144E+02 + 0.3448083067473096E+02 + 0.3440976375039794E+02 + 0.3433885392598834E+02 + 0.3426810079281141E+02 + 0.3419750394267116E+02 + 0.3412706296766110E+02 + 0.3405677745897264E+02 + 0.3398664701178164E+02 + 0.3391667122500424E+02 + 0.3384684969665800E+02 + 0.3377718202571009E+02 + 0.3370766781214530E+02 + 0.3363830665499670E+02 + 0.3356909815555884E+02 + 0.3350004191779232E+02 + 0.3343113754478885E+02 + 0.3336238464148770E+02 + 0.3329378281531163E+02 + 0.3322533167281912E+02 + 0.3315703082208909E+02 + 0.3308887987355487E+02 + 0.3302087843680016E+02 + 0.3295302612274047E+02 + 0.3288532254466821E+02 + 0.3281776731506330E+02 + 0.3275036004807515E+02 + 0.3268310036104483E+02 + 0.3261598787059341E+02 + 0.3254902219420890E+02 + 0.3248220295158573E+02 + 0.3241552976165114E+02 + 0.3234900224434273E+02 + 0.3228262002234543E+02 + 0.3221638271767711E+02 + 0.3215028995378721E+02 + 0.3208434135803474E+02 + 0.3201853655729007E+02 + 0.3195287517829780E+02 + 0.3188735684878032E+02 + 0.3182198119566178E+02 + 0.3175674784742907E+02 + 0.3169165643769195E+02 + 0.3162670659989008E+02 + 0.3156189796714527E+02 + 0.3149723017342043E+02 + 0.3143270285192693E+02 + 0.3136831563705808E+02 + 0.3130406816841497E+02 + 0.3123996008564647E+02 + 0.3117599102822202E+02 + 0.3111216063720099E+02 + 0.3104846855311240E+02 + 0.3098491441656696E+02 + 0.3092149787087663E+02 + 0.3085821855911132E+02 + 0.3079507612468879E+02 + 0.3073207021503645E+02 + 0.3066920047772553E+02 + 0.3060646656043700E+02 + 0.3054386811434924E+02 + 0.3048140479077485E+02 + 0.3041907624038674E+02 + 0.3035688211443956E+02 + 0.3029482206362975E+02 + 0.3023289573894314E+02 + 0.3017110279658835E+02 + 0.3010944289367142E+02 + 0.3004791568703026E+02 + 0.2998652083629624E+02 + 0.2992525800137797E+02 + 0.2986412684143396E+02 + 0.2980312701592346E+02 + 0.2974225818379938E+02 + 0.2968152000427518E+02 + 0.2962091214346884E+02 + 0.2956043426965818E+02 + 0.2950008604998999E+02 + 0.2943986714929442E+02 + 0.2937977723086248E+02 + 0.2931981595812418E+02 + 0.2925998300206808E+02 + 0.2920027803674785E+02 + 0.2914070073526627E+02 + 0.2908125076938479E+02 + 0.2902192780972572E+02 + 0.2896273152655833E+02 + 0.2890366159474041E+02 + 0.2884471769128046E+02 + 0.2878589949253773E+02 + 0.2872720667640447E+02 + 0.2866863892134341E+02 + 0.2861019590521026E+02 + 0.2855187730825699E+02 + 0.2849368281200251E+02 + 0.2843561209729132E+02 + 0.2837766484651791E+02 + 0.2831984074292606E+02 + 0.2826213946920763E+02 + 0.2820456071165540E+02 + 0.2814710415914708E+02 + 0.2808976949976879E+02 + 0.2803255642061914E+02 + 0.2797546460782747E+02 + 0.2791849374697651E+02 + 0.2786164352919621E+02 + 0.2780491365057378E+02 + 0.2774830380651665E+02 + 0.2769181369076711E+02 + 0.2763544299541634E+02 + 0.2757919141181694E+02 + 0.2752305863437386E+02 + 0.2746704436080041E+02 + 0.2741114828825331E+02 + 0.2735537011560527E+02 + 0.2729970954383973E+02 + 0.2724416627331104E+02 + 0.2718874000499949E+02 + 0.2713343044087784E+02 + 0.2707823728226882E+02 + 0.2702316023237222E+02 + 0.2696819899722703E+02 + 0.2691335328232890E+02 + 0.2685862279306989E+02 + 0.2680400723507362E+02 + 0.2674950631328523E+02 + 0.2669511973518903E+02 + 0.2664084721280613E+02 + 0.2658668845784422E+02 + 0.2653264318194607E+02 + 0.2647871109722701E+02 + 0.2642489191515001E+02 + 0.2637118534819419E+02 + 0.2631759111145506E+02 + 0.2626410891962767E+02 + 0.2621073848804248E+02 + 0.2615747953415715E+02 + 0.2610433177501298E+02 + 0.2605129492826287E+02 + 0.2599836871388352E+02 + 0.2594555285150350E+02 + 0.2589284706129713E+02 + 0.2584025106587098E+02 + 0.2578776458754756E+02 + 0.2573538734898296E+02 + 0.2568311907498376E+02 + 0.2563095949007862E+02 + 0.2557890831884103E+02 + 0.2552696528741202E+02 + 0.2547513012160153E+02 + 0.2542340254810918E+02 + 0.2537178229809169E+02 + 0.2532026910299758E+02 + 0.2526886269360772E+02 + 0.2521756280020818E+02 + 0.2516636915240097E+02 + 0.2511528148051957E+02 + 0.2506429951975782E+02 + 0.2501342300591706E+02 + 0.2496265167432300E+02 + 0.2491198526061280E+02 + 0.2486142349997257E+02 + 0.2481096612775681E+02 + 0.2476061288267301E+02 + 0.2471036350388200E+02 + 0.2466021773030663E+02 + 0.2461017530253591E+02 + 0.2456023596119760E+02 + 0.2451039944695344E+02 + 0.2446066550383810E+02 + 0.2441103387658752E+02 + 0.2436150430937936E+02 + 0.2431207654651742E+02 + 0.2426275033192015E+02 + 0.2421352540944515E+02 + 0.2416440152647492E+02 + 0.2411537843143300E+02 + 0.2406645587251104E+02 + 0.2401763360049641E+02 + 0.2396891136696315E+02 + 0.2392028892277870E+02 + 0.2387176601781767E+02 + 0.2382334240112525E+02 + 0.2377501782186760E+02 + 0.2372679203571071E+02 + 0.2367866480145419E+02 + 0.2363063587698818E+02 + 0.2358270501667243E+02 + 0.2353487197255210E+02 + 0.2348713649669347E+02 + 0.2343949834834427E+02 + 0.2339195729100302E+02 + 0.2334451308740505E+02 + 0.2329716549721282E+02 + 0.2324991427779428E+02 + 0.2320275918621665E+02 + 0.2315569998421056E+02 + 0.2310873643677296E+02 + 0.2306186830841130E+02 + 0.2301509536385377E+02 + 0.2296841736787776E+02 + 0.2292183408478898E+02 + 0.2287534528078915E+02 + 0.2282895072363624E+02 + 0.2278265018060368E+02 + 0.2273644341972225E+02 + 0.2269033020969389E+02 + 0.2264431031875230E+02 + 0.2259838351690032E+02 + 0.2255254957594812E+02 + 0.2250680826727372E+02 + 0.2246115936360596E+02 + 0.2241560263922111E+02 + 0.2237013786792746E+02 + 0.2232476482378293E+02 + 0.2227948328125900E+02 + 0.2223429301435049E+02 + 0.2218919379896146E+02 + 0.2214418541363851E+02 + 0.2209926763656006E+02 + 0.2205444024578237E+02 + 0.2200970301942761E+02 + 0.2196505573512570E+02 + 0.2192049817270539E+02 + 0.2187603011564238E+02 + 0.2183165134718423E+02 + 0.2178736164981561E+02 + 0.2174316080513919E+02 + 0.2169904859417457E+02 + 0.2165502479964172E+02 + 0.2161108920776514E+02 + 0.2156724160463313E+02 + 0.2152348177693820E+02 + 0.2147980951308896E+02 + 0.2143622460119287E+02 + 0.2139272682867663E+02 + 0.2134931598215495E+02 + 0.2130599184765823E+02 + 0.2126275421342411E+02 + 0.2121960287352770E+02 + 0.2117653762239241E+02 + 0.2113355825306000E+02 + 0.2109066455592334E+02 + 0.2104785632050046E+02 + 0.2100513333790698E+02 + 0.2096249540462564E+02 + 0.2091994231760700E+02 + 0.2087747387340092E+02 + 0.2083508986843431E+02 + 0.2079279009867395E+02 + 0.2075057436029606E+02 + 0.2070844245140084E+02 + 0.2066639417006128E+02 + 0.2062442931435816E+02 + 0.2058254768379026E+02 + 0.2054074907776717E+02 + 0.2049903329619614E+02 + 0.2045740014251323E+02 + 0.2041584942063685E+02 + 0.2037438093403235E+02 + 0.2033299448593041E+02 + 0.2029168987912057E+02 + 0.2025046691650709E+02 + 0.2020932540348451E+02 + 0.2016826514582832E+02 + 0.2012728594918636E+02 + 0.2008638762069549E+02 + 0.2004556996763531E+02 + 0.2000483279734380E+02 + 0.1996417591988748E+02 + 0.1992359914598243E+02 + 0.1988310228572490E+02 + 0.1984268514793864E+02 + 0.1980234754064712E+02 + 0.1976208927221085E+02 + 0.1972191015630783E+02 + 0.1968181000859189E+02 + 0.1964178864413781E+02 + 0.1960184587675553E+02 + 0.1956198151940784E+02 + 0.1952219538494065E+02 + 0.1948248728887270E+02 + 0.1944285704783003E+02 + 0.1940330447812691E+02 + 0.1936382939706684E+02 + 0.1932443162227946E+02 + 0.1928511097113827E+02 + 0.1924586726275586E+02 + 0.1920670031708916E+02 + 0.1916760995370012E+02 + 0.1912859599235966E+02 + 0.1908965825280822E+02 + 0.1905079655462756E+02 + 0.1901201072088322E+02 + 0.1897330057694718E+02 + 0.1893466594773694E+02 + 0.1889610665693300E+02 + 0.1885762252716459E+02 + 0.1881921338074091E+02 + 0.1878087904208591E+02 + 0.1874261933728802E+02 + 0.1870443409214397E+02 + 0.1866632313385691E+02 + 0.1862828629083897E+02 + 0.1859032339116444E+02 + 0.1855243426357901E+02 + 0.1851461873746399E+02 + 0.1847687664185344E+02 + 0.1843920780665257E+02 + 0.1840161206270240E+02 + 0.1836408924050195E+02 + 0.1832663917107488E+02 + 0.1828926168610055E+02 + 0.1825195661693424E+02 + 0.1821472379633528E+02 + 0.1817756305889218E+02 + 0.1814047423892878E+02 + 0.1810345717143339E+02 + 0.1806651169242499E+02 + 0.1802963763760316E+02 + 0.1799283484251970E+02 + 0.1795610314270276E+02 + 0.1791944237332881E+02 + 0.1788285237174484E+02 + 0.1784633297894740E+02 + 0.1780988403585754E+02 + 0.1777350538168719E+02 + 0.1773719685302723E+02 + 0.1770095828586918E+02 + 0.1766478951938594E+02 + 0.1762869039900156E+02 + 0.1759266077044519E+02 + 0.1755670047733376E+02 + 0.1752080935943724E+02 + 0.1748498725571347E+02 + 0.1744923400703228E+02 + 0.1741354945895073E+02 + 0.1737793345730253E+02 + 0.1734238584797253E+02 + 0.1730690647752389E+02 + 0.1727149519228056E+02 + 0.1723615183841893E+02 + 0.1720087626236922E+02 + 0.1716566831027177E+02 + 0.1713052782874936E+02 + 0.1709545466653437E+02 + 0.1706044867241206E+02 + 0.1702550969536577E+02 + 0.1699063758582313E+02 + 0.1695583219418198E+02 + 0.1692109337064538E+02 + 0.1688642096568260E+02 + 0.1685181482951761E+02 + 0.1681727481306704E+02 + 0.1678280077089659E+02 + 0.1674839255813826E+02 + 0.1671405002908568E+02 + 0.1667977303575618E+02 + 0.1664556142930086E+02 + 0.1661141506175532E+02 + 0.1657733379046491E+02 + 0.1654331747400463E+02 + 0.1650936597023958E+02 + 0.1647547913497285E+02 + 0.1644165682311602E+02 + 0.1640789888980259E+02 + 0.1637420519300786E+02 + 0.1634057559142462E+02 + 0.1630700994362925E+02 + 0.1627350810929995E+02 + 0.1624006994829394E+02 + 0.1620669532032043E+02 + 0.1617338408611123E+02 + 0.1614013610659702E+02 + 0.1610695124252811E+02 + 0.1607382935556169E+02 + 0.1604077030755465E+02 + 0.1600777396022604E+02 + 0.1597484017664390E+02 + 0.1594196882033936E+02 + 0.1590915975471800E+02 + 0.1587641284476843E+02 + 0.1584372795613869E+02 + 0.1581110495418390E+02 + 0.1577854370434202E+02 + 0.1574604407194852E+02 + 0.1571360592219290E+02 + 0.1568122912204908E+02 + 0.1564891353945843E+02 + 0.1561665904208170E+02 + 0.1558446549771543E+02 + 0.1555233277413502E+02 + 0.1552026073889337E+02 + 0.1548824926069935E+02 + 0.1545629820900753E+02 + 0.1542440745312013E+02 + 0.1539257686442721E+02 + 0.1536080631588895E+02 + 0.1532909568014888E+02 + 0.1529744482881151E+02 + 0.1526585363254808E+02 + 0.1523432196178720E+02 + 0.1520284968873472E+02 + 0.1517143668721148E+02 + 0.1514008283083033E+02 + 0.1510878799385361E+02 + 0.1507755205119292E+02 + 0.1504637487751060E+02 + 0.1501525634790860E+02 + 0.1498419633799174E+02 + 0.1495319472312272E+02 + 0.1492225137942309E+02 + 0.1489136618395947E+02 + 0.1486053901357839E+02 + 0.1482976974562910E+02 + 0.1479905825818508E+02 + 0.1476840442909534E+02 + 0.1473780813677326E+02 + 0.1470726926052794E+02 + 0.1467678767946253E+02 + 0.1464636327314938E+02 + 0.1461599592201441E+02 + 0.1458568550628428E+02 + 0.1455543190661887E+02 + 0.1452523500457060E+02 + 0.1449509468150642E+02 + 0.1446501081911806E+02 + 0.1443498329990023E+02 + 0.1440501200616690E+02 + 0.1437509682068026E+02 + 0.1434523762733485E+02 + 0.1431543430989369E+02 + 0.1428568675229081E+02 + 0.1425599483913776E+02 + 0.1422635845487666E+02 + 0.1419677748428003E+02 + 0.1416725181324453E+02 + 0.1413778132757301E+02 + 0.1410836591329115E+02 + 0.1407900545740525E+02 + 0.1404969984682763E+02 + 0.1402044896859245E+02 + 0.1399125271055310E+02 + 0.1396211096046314E+02 + 0.1393302360625649E+02 + 0.1390399053695831E+02 + 0.1387501164156432E+02 + 0.1384608680915665E+02 + 0.1381721592972738E+02 + 0.1378839889322930E+02 + 0.1375963558969892E+02 + 0.1373092591018041E+02 + 0.1370226974572573E+02 + 0.1367366698740254E+02 + 0.1364511752713841E+02 + 0.1361662125686198E+02 + 0.1358817806856765E+02 + 0.1355978785542380E+02 + 0.1353145051071239E+02 + 0.1350316592761527E+02 + 0.1347493399984197E+02 + 0.1344675462106512E+02 + 0.1341862768502812E+02 + 0.1339055308694760E+02 + 0.1336253072233036E+02 + 0.1333456048651803E+02 + 0.1330664227515089E+02 + 0.1327877598380156E+02 + 0.1325096150804642E+02 + 0.1322319874485498E+02 + 0.1319548759156778E+02 + 0.1316782794538028E+02 + 0.1314021970400533E+02 + 0.1311266276522081E+02 + 0.1308515702670562E+02 + 0.1305770238707411E+02 + 0.1303029874522607E+02 + 0.1300294599994644E+02 + 0.1297564405091468E+02 + 0.1294839279812516E+02 + 0.1292119214141061E+02 + 0.1289404198115828E+02 + 0.1286694221793817E+02 + 0.1283989275219758E+02 + 0.1281289348540783E+02 + 0.1278594431953674E+02 + 0.1275904515636765E+02 + 0.1273219589806013E+02 + 0.1270539644692284E+02 + 0.1267864670512162E+02 + 0.1265194657582254E+02 + 0.1262529596280668E+02 + 0.1259869476966960E+02 + 0.1257214290035912E+02 + 0.1254564025902562E+02 + 0.1251918674965712E+02 + 0.1249278227712258E+02 + 0.1246642674696058E+02 + 0.1244012006452813E+02 + 0.1241386213552518E+02 + 0.1238765286592482E+02 + 0.1236149216151943E+02 + 0.1233537992870251E+02 + 0.1230931607442922E+02 + 0.1228330050548566E+02 + 0.1225733312926719E+02 + 0.1223141385380564E+02 + 0.1220554258695979E+02 + 0.1217971923691873E+02 + 0.1215394371226873E+02 + 0.1212821592141955E+02 + 0.1210253577327009E+02 + 0.1207690317736073E+02 + 0.1205131804307128E+02 + 0.1202578028019278E+02 + 0.1200028979912777E+02 + 0.1197484651011925E+02 + 0.1194945032367591E+02 + 0.1192410115078096E+02 + 0.1189879890225788E+02 + 0.1187354348940626E+02 + 0.1184833482438350E+02 + 0.1182317281922196E+02 + 0.1179805738609161E+02 + 0.1177298843754355E+02 + 0.1174796588597178E+02 + 0.1172298964415023E+02 + 0.1169805962572687E+02 + 0.1167317574425022E+02 + 0.1164833791342872E+02 + 0.1162354604750179E+02 + 0.1159880006058266E+02 + 0.1157409986699561E+02 + 0.1154944538177072E+02 + 0.1152483651984478E+02 + 0.1150027319632075E+02 + 0.1147575532698265E+02 + 0.1145128282753088E+02 + 0.1142685561381218E+02 + 0.1140247360238124E+02 + 0.1137813670972776E+02 + 0.1135384485246249E+02 + 0.1132959794791478E+02 + 0.1130539591336677E+02 + 0.1128123866612448E+02 + 0.1125712612399849E+02 + 0.1123305820472811E+02 + 0.1120903482619616E+02 + 0.1118505590725464E+02 + 0.1116112136679688E+02 + 0.1113723112370492E+02 + 0.1111338509736670E+02 + 0.1108958320713000E+02 + 0.1106582537233026E+02 + 0.1104211151286858E+02 + 0.1101844154863796E+02 + 0.1099481539961087E+02 + 0.1097123298680059E+02 + 0.1094769423136379E+02 + 0.1092419905434722E+02 + 0.1090074737703039E+02 + 0.1087733912062505E+02 + 0.1085397420635715E+02 + 0.1083065255638324E+02 + 0.1080737409303748E+02 + 0.1078413873858020E+02 + 0.1076094641578720E+02 + 0.1073779704749707E+02 + 0.1071469055647037E+02 + 0.1069162686601735E+02 + 0.1066860589954941E+02 + 0.1064562758042349E+02 + 0.1062269183277665E+02 + 0.1059979858097464E+02 + 0.1057694774927445E+02 + 0.1055413926236822E+02 + 0.1053137304505270E+02 + 0.1050864902200993E+02 + 0.1048596711836126E+02 + 0.1046332725936146E+02 + 0.1044072937019378E+02 + 0.1041817337694207E+02 + 0.1039565920611004E+02 + 0.1037318678404306E+02 + 0.1035075603711866E+02 + 0.1032836689166087E+02 + 0.1030601927390192E+02 + 0.1028371311097357E+02 + 0.1026144833053627E+02 + 0.1023922486011002E+02 + 0.1021704262742281E+02 + 0.1019490156029914E+02 + 0.1017280158643077E+02 + 0.1015074263396832E+02 + 0.1012872463137641E+02 + 0.1010674750699846E+02 + 0.1008481118977442E+02 + 0.1006291560911538E+02 + 0.1004106069428788E+02 + 0.1001924637463203E+02 + 0.9997472579538695E+01 + 0.9975739238267693E+01 + 0.9954046280739851E+01 + 0.9932393637523562E+01 + 0.9910781239057949E+01 + 0.9889209015879789E+01 + 0.9867676898641410E+01 + 0.9846184817857724E+01 + 0.9824732704538931E+01 + 0.9803320490294258E+01 + 0.9781948106612656E+01 + 0.9760615485120582E+01 + 0.9739322557659495E+01 + 0.9718069255935681E+01 + 0.9696855511960326E+01 + 0.9675681258218951E+01 + 0.9654546427082837E+01 + 0.9633450951221084E+01 + 0.9612394763820833E+01 + 0.9591377797959993E+01 + 0.9570399986771868E+01 + 0.9549461263577854E+01 + 0.9528561561571122E+01 + 0.9507700814324522E+01 + 0.9486878956191172E+01 + 0.9466095921455132E+01 + 0.9445351644361384E+01 + 0.9424646059226935E+01 + 0.9403979100233867E+01 + 0.9383350701830262E+01 + 0.9362760799181535E+01 + 0.9342209327400168E+01 + 0.9321696221709360E+01 + 0.9301221417779100E+01 + 0.9280784851201569E+01 + 0.9260386457594473E+01 + 0.9240026172868541E+01 + 0.9219703932842778E+01 + 0.9199419673455180E+01 + 0.9179173331224702E+01 + 0.9158964842633726E+01 + 0.9138794144250905E+01 + 0.9118661173196481E+01 + 0.9098565866561996E+01 + 0.9078508161393760E+01 + 0.9058487994936307E+01 + 0.9038505304348282E+01 + 0.9018560026894011E+01 + 0.8998652100592564E+01 + 0.8978781463506417E+01 + 0.8958948053668250E+01 + 0.8939151809430475E+01 + 0.8919392669105186E+01 + 0.8899670570970336E+01 + 0.8879985453648773E+01 + 0.8860337255741179E+01 + 0.8840725915879752E+01 + 0.8821151373387137E+01 + 0.8801613567676467E+01 + 0.8782112438085942E+01 + 0.8762647924183716E+01 + 0.8743219965507318E+01 + 0.8723828501569663E+01 + 0.8704473472424445E+01 + 0.8685154818213913E+01 + 0.8665872478991055E+01 + 0.8646626395018638E+01 + 0.8627416506545854E+01 + 0.8608242753806261E+01 + 0.8589105077765472E+01 + 0.8570003419603198E+01 + 0.8550937720386763E+01 + 0.8531907921275167E+01 + 0.8512913963388273E+01 + 0.8493955787780928E+01 + 0.8475033336012482E+01 + 0.8456146549814015E+01 + 0.8437295370828394E+01 + 0.8418479741036453E+01 + 0.8399699602531012E+01 + 0.8380954897311213E+01 + 0.8362245567701905E+01 + 0.8343571556155490E+01 + 0.8324932805022687E+01 + 0.8306329256923252E+01 + 0.8287760854592595E+01 + 0.8269227540676118E+01 + 0.8250729258264075E+01 + 0.8232265950703882E+01 + 0.8213837561231610E+01 + 0.8195444033230503E+01 + 0.8177085310155857E+01 + 0.8158761335356569E+01 + 0.8140472052478232E+01 + 0.8122217405375594E+01 + 0.8103997337800209E+01 + 0.8085811793812656E+01 + 0.8067660717722486E+01 + 0.8049544053733246E+01 + 0.8031461746275914E+01 + 0.8013413739986614E+01 + 0.7995399979389134E+01 + 0.7977420409113039E+01 + 0.7959474973897396E+01 + 0.7941563618377285E+01 + 0.7923686287600927E+01 + 0.7905842927084931E+01 + 0.7888033482244741E+01 + 0.7870257898406173E+01 + 0.7852516120813847E+01 + 0.7834808094596237E+01 + 0.7817133765284701E+01 + 0.7799493078970218E+01 + 0.7781885981659473E+01 + 0.7764312419295873E+01 + 0.7746772337786750E+01 + 0.7729265682923804E+01 + 0.7711792400848419E+01 + 0.7694352438301905E+01 + 0.7676945741957675E+01 + 0.7659572258408645E+01 + 0.7642231934199142E+01 + 0.7624924715755458E+01 + 0.7607650549731654E+01 + 0.7590409383292376E+01 + 0.7573201163541525E+01 + 0.7556025837553358E+01 + 0.7538883352466194E+01 + 0.7521773655314401E+01 + 0.7504696693284642E+01 + 0.7487652414029522E+01 + 0.7470640765151559E+01 + 0.7453661694295709E+01 + 0.7436715149370765E+01 + 0.7419801078214956E+01 + 0.7402919428600308E+01 + 0.7386070148323187E+01 + 0.7369253185078359E+01 + 0.7352468486760123E+01 + 0.7335716002031928E+01 + 0.7318995679586027E+01 + 0.7302307467937091E+01 + 0.7285651315313379E+01 + 0.7269027169788911E+01 + 0.7252434979604351E+01 + 0.7235874693834001E+01 + 0.7219346261626839E+01 + 0.7202849632001319E+01 + 0.7186384753823073E+01 + 0.7169951575828733E+01 + 0.7153550046790767E+01 + 0.7137180115983975E+01 + 0.7120841732716654E+01 + 0.7104534846227033E+01 + 0.7088259405852742E+01 + 0.7072015360870736E+01 + 0.7055802660582751E+01 + 0.7039621254861117E+01 + 0.7023471093664151E+01 + 0.7007352126819586E+01 + 0.6991264303975830E+01 + 0.6975207574642498E+01 + 0.6959181888342493E+01 + 0.6943187195238989E+01 + 0.6927223445647442E+01 + 0.6911290589788909E+01 + 0.6895388577911247E+01 + 0.6879517360201060E+01 + 0.6863676886775359E+01 + 0.6847867107964898E+01 + 0.6832087974123978E+01 + 0.6816339435543647E+01 + 0.6800621442803321E+01 + 0.6784933946553764E+01 + 0.6769276897373222E+01 + 0.6753650246083288E+01 + 0.6738053943570930E+01 + 0.6722487940631367E+01 + 0.6706952188150633E+01 + 0.6691446637012740E+01 + 0.6675971238024069E+01 + 0.6660525942251023E+01 + 0.6645110700868834E+01 + 0.6629725464963637E+01 + 0.6614370185761255E+01 + 0.6599044814537773E+01 + 0.6583749302482677E+01 + 0.6568483600983821E+01 + 0.6553247661534694E+01 + 0.6538041435531392E+01 + 0.6522864874413985E+01 + 0.6507717929629227E+01 + 0.6492600552542490E+01 + 0.6477512694869072E+01 + 0.6462454308593509E+01 + 0.6447425345597790E+01 + 0.6432425757600181E+01 + 0.6417455496160630E+01 + 0.6402514512749304E+01 + 0.6387602759222983E+01 + 0.6372720187809636E+01 + 0.6357866750649006E+01 + 0.6343042399821741E+01 + 0.6328247087351771E+01 + 0.6313480765162063E+01 + 0.6298743385247660E+01 + 0.6284034899700546E+01 + 0.6269355260525592E+01 + 0.6254704419994865E+01 + 0.6240082330735028E+01 + 0.6225488945291113E+01 + 0.6210924216022010E+01 + 0.6196388095074136E+01 + 0.6181880534486160E+01 + 0.6167401486578924E+01 + 0.6152950904130266E+01 + 0.6138528739854430E+01 + 0.6124134946322214E+01 + 0.6109769475940223E+01 + 0.6095432281006809E+01 + 0.6081123314020281E+01 + 0.6066842527895608E+01 + 0.6052589875492428E+01 + 0.6038365309540813E+01 + 0.6024168782621027E+01 + 0.6010000247204517E+01 + 0.5995859655933051E+01 + 0.5981746961899987E+01 + 0.5967662118160203E+01 + 0.5953605077617309E+01 + 0.5939575792968267E+01 + 0.5925574216792088E+01 + 0.5911600301795029E+01 + 0.5897654001134194E+01 + 0.5883735267943916E+01 + 0.5869844055270282E+01 + 0.5855980316096961E+01 + 0.5842144003310323E+01 + 0.5828335069779319E+01 + 0.5814553468515869E+01 + 0.5800799152472130E+01 + 0.5787072074642000E+01 + 0.5773372188369492E+01 + 0.5759699446984058E+01 + 0.5746053803691099E+01 + 0.5732435211520529E+01 + 0.5718843623383916E+01 + 0.5705278992179983E+01 + 0.5691741271041914E+01 + 0.5678230413079485E+01 + 0.5664746371418890E+01 + 0.5651289099571278E+01 + 0.5637858551071357E+01 + 0.5624454679292883E+01 + 0.5611077437239368E+01 + 0.5597726777737105E+01 + 0.5584402653629247E+01 + 0.5571105018243814E+01 + 0.5557833824988594E+01 + 0.5544589027203610E+01 + 0.5531370578306142E+01 + 0.5518178431673101E+01 + 0.5505012540573006E+01 + 0.5491872858125936E+01 + 0.5478759337333840E+01 + 0.5465671931175103E+01 + 0.5452610593031817E+01 + 0.5439575276389348E+01 + 0.5426565934632027E+01 + 0.5413582521029349E+01 + 0.5400624988744596E+01 + 0.5387693290876917E+01 + 0.5374787380708041E+01 + 0.5361907211555585E+01 + 0.5349052736647012E+01 + 0.5336223909181047E+01 + 0.5323420682294104E+01 + 0.5310643009061367E+01 + 0.5297890842824409E+01 + 0.5285164137033178E+01 + 0.5272462845027460E+01 + 0.5259786919890127E+01 + 0.5247136314508235E+01 + 0.5234510981709071E+01 + 0.5221910874709996E+01 + 0.5209335946956666E+01 + 0.5196786151798896E+01 + 0.5184261442427447E+01 + 0.5171761771890983E+01 + 0.5159287093151934E+01 + 0.5146837359263519E+01 + 0.5134412523329581E+01 + 0.5122012538367901E+01 + 0.5109637357420676E+01 + 0.5097286933536600E+01 + 0.5084961219676939E+01 + 0.5072660168826251E+01 + 0.5060383733983044E+01 + 0.5048131868060650E+01 + 0.5035904524037474E+01 + 0.5023701654957092E+01 + 0.5011523213773182E+01 + 0.4999369153319138E+01 + 0.4987239426306074E+01 + 0.4975133985356779E+01 + 0.4963052783281214E+01 + 0.4950995773125601E+01 + 0.4938962907857435E+01 + 0.4926954140259783E+01 + 0.4914969422907149E+01 + 0.4903008708276467E+01 + 0.4891071948985235E+01 + 0.4879159097880808E+01 + 0.4867270107737924E+01 + 0.4855404931152354E+01 + 0.4843563520499211E+01 + 0.4831745828051888E+01 + 0.4819951806233802E+01 + 0.4808181407771259E+01 + 0.4796434585331912E+01 + 0.4784711291423969E+01 + 0.4773011478346428E+01 + 0.4761335098293441E+01 + 0.4749682103515571E+01 + 0.4738052446458126E+01 + 0.4726446079504838E+01 + 0.4714862954899161E+01 + 0.4703303024693899E+01 + 0.4691766240836376E+01 + 0.4680252555328995E+01 + 0.4668761920419068E+01 + 0.4657294288307162E+01 + 0.4645849611087948E+01 + 0.4634427840731557E+01 + 0.4623028929110148E+01 + 0.4611652828106598E+01 + 0.4600299489792575E+01 + 0.4588968866194030E+01 + 0.4577660909386955E+01 + 0.4566375571777265E+01 + 0.4555112805756475E+01 + 0.4543872563803558E+01 + 0.4532654798886906E+01 + 0.4521459464001095E+01 + 0.4510286512072232E+01 + 0.4499135896015733E+01 + 0.4488007568673810E+01 + 0.4476901483031758E+01 + 0.4465817592893476E+01 + 0.4454755852194245E+01 + 0.4443716214760926E+01 + 0.4432698634249727E+01 + 0.4421703064205741E+01 + 0.4410729458237382E+01 + 0.4399777770577265E+01 + 0.4388847955577963E+01 + 0.4377939967569511E+01 + 0.4367053761130333E+01 + 0.4356189290858676E+01 + 0.4345346511312293E+01 + 0.4334525377225653E+01 + 0.4323725843338504E+01 + 0.4312947864408867E+01 + 0.4302191395758966E+01 + 0.4291456392873737E+01 + 0.4280742811178307E+01 + 0.4270050606185603E+01 + 0.4259379733395348E+01 + 0.4248730148276520E+01 + 0.4238101806621701E+01 + 0.4227494664324579E+01 + 0.4216908677243956E+01 + 0.4206343801559762E+01 + 0.4195799993568739E+01 + 0.4185277209527761E+01 + 0.4174775406001535E+01 + 0.4164294539682423E+01 + 0.4153834567198457E+01 + 0.4143395445266092E+01 + 0.4132977130619219E+01 + 0.4122579579958220E+01 + 0.4112202750446707E+01 + 0.4101846599513449E+01 + 0.4091511084522292E+01 + 0.4081196162897922E+01 + 0.4070901792081799E+01 + 0.4060627929466302E+01 + 0.4050374532796250E+01 + 0.4040141560060220E+01 + 0.4029928969190726E+01 + 0.4019736718306176E+01 + 0.4009564765661031E+01 + 0.3999413069445624E+01 + 0.3989281587944488E+01 + 0.3979170279515416E+01 + 0.3969079102462942E+01 + 0.3959008015451881E+01 + 0.3948956977486867E+01 + 0.3938925947519150E+01 + 0.3928914884622647E+01 + 0.3918923748000570E+01 + 0.3908952496790630E+01 + 0.3899001090129824E+01 + 0.3889069487163578E+01 + 0.3879157646980757E+01 + 0.3869265529141830E+01 + 0.3859393093795291E+01 + 0.3849540301052496E+01 + 0.3839707110908634E+01 + 0.3829893483230293E+01 + 0.3820099377810058E+01 + 0.3810324754640887E+01 + 0.3800569574033434E+01 + 0.3790833796258386E+01 + 0.3781117381826865E+01 + 0.3771420291662555E+01 + 0.3761742486655960E+01 + 0.3752083927577163E+01 + 0.3742444575044657E+01 + 0.3732824389599417E+01 + 0.3723223332127002E+01 + 0.3713641364202324E+01 + 0.3704078447407997E+01 + 0.3694534543204211E+01 + 0.3685009612880096E+01 + 0.3675503617641680E+01 + 0.3666016518902045E+01 + 0.3656548278605969E+01 + 0.3647098858705165E+01 + 0.3637668221158132E+01 + 0.3628256328036731E+01 + 0.3618863141368131E+01 + 0.3609488623275827E+01 + 0.3600132736242666E+01 + 0.3590795442748839E+01 + 0.3581476705259195E+01 + 0.3572176486323463E+01 + 0.3562894748447978E+01 + 0.3553631454236294E+01 + 0.3544386566736012E+01 + 0.3535160049023250E+01 + 0.3525951864152776E+01 + 0.3516761975271598E+01 + 0.3507590345491340E+01 + 0.3498436937971622E+01 + 0.3489301716234726E+01 + 0.3480184643833488E+01 + 0.3471085684313691E+01 + 0.3462004801400576E+01 + 0.3452941958813707E+01 + 0.3443897120306068E+01 + 0.3434870250011771E+01 + 0.3425861312121510E+01 + 0.3416870270778421E+01 + 0.3407897090153853E+01 + 0.3398941734380965E+01 + 0.3390004167619680E+01 + 0.3381084354462974E+01 + 0.3372182259603078E+01 + 0.3363297847715167E+01 + 0.3354431083695372E+01 + 0.3345581932477999E+01 + 0.3336750358961756E+01 + 0.3327936328172215E+01 + 0.3319139805145791E+01 + 0.3310360754887742E+01 + 0.3301599142579487E+01 + 0.3292854933441610E+01 + 0.3284128092710623E+01 + 0.3275418586186874E+01 + 0.3266726379902559E+01 + 0.3258051439801790E+01 + 0.3249393731539935E+01 + 0.3240753220593021E+01 + 0.3232129872451464E+01 + 0.3223523653304003E+01 + 0.3214934529700917E+01 + 0.3206362468119821E+01 + 0.3197807434820501E+01 + 0.3189269395905895E+01 + 0.3180748317462732E+01 + 0.3172244166087523E+01 + 0.3163756908690848E+01 + 0.3155286512123881E+01 + 0.3146832943120324E+01 + 0.3138396168312345E+01 + 0.3129976154305767E+01 + 0.3121572868193653E+01 + 0.3113186277432158E+01 + 0.3104816349430124E+01 + 0.3096463051576612E+01 + 0.3088126351234361E+01 + 0.3079806215713967E+01 + 0.3071502612410735E+01 + 0.3063215508791361E+01 + 0.3054944872284318E+01 + 0.3046690670643639E+01 + 0.3038452871942937E+01 + 0.3030231444215698E+01 + 0.3022026355520322E+01 + 0.3013837573945795E+01 + 0.3005665067533820E+01 + 0.2997508804494452E+01 + 0.2989368753241444E+01 + 0.2981244882147113E+01 + 0.2973137159617418E+01 + 0.2965045554115202E+01 + 0.2956970034058458E+01 + 0.2948910568073495E+01 + 0.2940867125090169E+01 + 0.2932839674009525E+01 + 0.2924828183833075E+01 + 0.2916832623737355E+01 + 0.2908852962861192E+01 + 0.2900889170339313E+01 + 0.2892941215333903E+01 + 0.2885009066960485E+01 + 0.2877092694497839E+01 + 0.2869192067549886E+01 + 0.2861307155702809E+01 + 0.2853437928535717E+01 + 0.2845584355664005E+01 + 0.2837746406658957E+01 + 0.2829924051277562E+01 + 0.2822117259716668E+01 + 0.2814326002178655E+01 + 0.2806550248791979E+01 + 0.2798789969587995E+01 + 0.2791045134537760E+01 + 0.2783315713741248E+01 + 0.2775601677691571E+01 + 0.2767902996894424E+01 + 0.2760219641837105E+01 + 0.2752551583048159E+01 + 0.2744898791017807E+01 + 0.2737261236355764E+01 + 0.2729638890122383E+01 + 0.2722031723415756E+01 + 0.2714439707209560E+01 + 0.2706862812198021E+01 + 0.2699301008976907E+01 + 0.2691754268360117E+01 + 0.2684222562054525E+01 + 0.2676705861920640E+01 + 0.2669204139624620E+01 + 0.2661717366237491E+01 + 0.2654245512647899E+01 + 0.2646788549918002E+01 + 0.2639346450004940E+01 + 0.2631919185062068E+01 + 0.2624506727144315E+01 + 0.2617109048039003E+01 + 0.2609726119419853E+01 + 0.2602357913001583E+01 + 0.2595004400914057E+01 + 0.2587665555382640E+01 + 0.2580341348580183E+01 + 0.2573031752619457E+01 + 0.2565736739559164E+01 + 0.2558456281514785E+01 + 0.2551190351205328E+01 + 0.2543938921545439E+01 + 0.2536701965373132E+01 + 0.2529479455293890E+01 + 0.2522271363788320E+01 + 0.2515077663333544E+01 + 0.2507898326702033E+01 + 0.2500733326770968E+01 + 0.2493582636413752E+01 + 0.2486446228820176E+01 + 0.2479324077309176E+01 + 0.2472216155152342E+01 + 0.2465122435574489E+01 + 0.2458042891752795E+01 + 0.2450977496853931E+01 + 0.2443926224379272E+01 + 0.2436889048002705E+01 + 0.2429865941348337E+01 + 0.2422856877943258E+01 + 0.2415861831235818E+01 + 0.2408880774668456E+01 + 0.2401913682168154E+01 + 0.2394960527976048E+01 + 0.2388021286279308E+01 + 0.2381095931024913E+01 + 0.2374184435970344E+01 + 0.2367286774851947E+01 + 0.2360402921827525E+01 + 0.2353532851382247E+01 + 0.2346676537969967E+01 + 0.2339833956082419E+01 + 0.2333005080238035E+01 + 0.2326189884914511E+01 + 0.2319388344608457E+01 + 0.2312600433831367E+01 + 0.2305826127062298E+01 + 0.2299065399002888E+01 + 0.2292318224581740E+01 + 0.2285584578696208E+01 + 0.2278864436254237E+01 + 0.2272157772180125E+01 + 0.2265464561364336E+01 + 0.2258784778922806E+01 + 0.2252118400249156E+01 + 0.2245465400710291E+01 + 0.2238825755592184E+01 + 0.2232199440089266E+01 + 0.2225586429352965E+01 + 0.2218986698714859E+01 + 0.2212400223777083E+01 + 0.2205826980123387E+01 + 0.2199266943420226E+01 + 0.2192720089482797E+01 + 0.2186186394099588E+01 + 0.2179665833080910E+01 + 0.2173158382301507E+01 + 0.2166664017603403E+01 + 0.2160182714847730E+01 + 0.2153714449964484E+01 + 0.2147259198853959E+01 + 0.2140816937609862E+01 + 0.2134387642744231E+01 + 0.2127971290779396E+01 + 0.2121567858122688E+01 + 0.2115177320985068E+01 + 0.2108799655515863E+01 + 0.2102434838001449E+01 + 0.2096082845101319E+01 + 0.2089743653491541E+01 + 0.2083417239848208E+01 + 0.2077103580911388E+01 + 0.2070802653395894E+01 + 0.2064514434064511E+01 + 0.2058238899885668E+01 + 0.2051976027828574E+01 + 0.2045725794823492E+01 + 0.2039488177766743E+01 + 0.2033263153514688E+01 + 0.2027050699052566E+01 + 0.2020850791885849E+01 + 0.2014663409594994E+01 + 0.2008488529640568E+01 + 0.2002326129155558E+01 + 0.1996176185167306E+01 + 0.1990038674810025E+01 + 0.1983913575762524E+01 + 0.1977800865808410E+01 + 0.1971700522688118E+01 + 0.1965612524088209E+01 + 0.1959536847651472E+01 + 0.1953473471030017E+01 + 0.1947422372070680E+01 + 0.1941383528650431E+01 + 0.1935356918640298E+01 + 0.1929342520047439E+01 + 0.1923340310896884E+01 + 0.1917350269206782E+01 + 0.1911372373141735E+01 + 0.1905406600893447E+01 + 0.1899452930641277E+01 + 0.1893511340693173E+01 + 0.1887581809383484E+01 + 0.1881664315031649E+01 + 0.1875758836082325E+01 + 0.1869865351011306E+01 + 0.1863983838280108E+01 + 0.1858114276494721E+01 + 0.1852256644307599E+01 + 0.1846410920351200E+01 + 0.1840577083369332E+01 + 0.1834755112143164E+01 + 0.1828944985434440E+01 + 0.1823146682134080E+01 + 0.1817360181186950E+01 + 0.1811585461514462E+01 + 0.1805822502137571E+01 + 0.1800071282121465E+01 + 0.1794331780509565E+01 + 0.1788603976475448E+01 + 0.1782887849263870E+01 + 0.1777183378094336E+01 + 0.1771490542277834E+01 + 0.1765809321178666E+01 + 0.1760139694135465E+01 + 0.1754481640583995E+01 + 0.1748835140025310E+01 + 0.1743200171935601E+01 + 0.1737576715903872E+01 + 0.1731964751605930E+01 + 0.1726364258690653E+01 + 0.1720775216874248E+01 + 0.1715197605929360E+01 + 0.1709631405602219E+01 + 0.1704076595736830E+01 + 0.1698533156270865E+01 + 0.1693001067116382E+01 + 0.1687480308266150E+01 + 0.1681970859799386E+01 + 0.1676472701768850E+01 + 0.1670985814280403E+01 + 0.1665510177505192E+01 + 0.1660045771588455E+01 + 0.1654592576768840E+01 + 0.1649150573408193E+01 + 0.1643719741845376E+01 + 0.1638300062466260E+01 + 0.1632891515731209E+01 + 0.1627494082075516E+01 + 0.1622107741992219E+01 + 0.1616732476073460E+01 + 0.1611368264888944E+01 + 0.1606015089059196E+01 + 0.1600672929304152E+01 + 0.1595341766322631E+01 + 0.1590021580870946E+01 + 0.1584712353827543E+01 + 0.1579414066052977E+01 + 0.1574126698434771E+01 + 0.1568850231939220E+01 + 0.1563584647511885E+01 + 0.1558329926141453E+01 + 0.1553086048937721E+01 + 0.1547852996996102E+01 + 0.1542630751436638E+01 + 0.1537419293473116E+01 + 0.1532218604303468E+01 + 0.1527028665169623E+01 + 0.1521849457464990E+01 + 0.1516680962577335E+01 + 0.1511523161891838E+01 + 0.1506376036839566E+01 + 0.1501239568831769E+01 + 0.1496113739319086E+01 + 0.1490998529924925E+01 + 0.1485893922276891E+01 + 0.1480799898001642E+01 + 0.1475716438791422E+01 + 0.1470643526325421E+01 + 0.1465581142303383E+01 + 0.1460529268572802E+01 + 0.1455487886987792E+01 + 0.1450456979400016E+01 + 0.1445436527739076E+01 + 0.1440426513928682E+01 + 0.1435426919901434E+01 + 0.1430437727724482E+01 + 0.1425458919476354E+01 + 0.1420490477232704E+01 + 0.1415532383166122E+01 + 0.1410584619454138E+01 + 0.1405647168270546E+01 + 0.1400720011893150E+01 + 0.1395803132610508E+01 + 0.1390896512706524E+01 + 0.1386000134576271E+01 + 0.1381113980632127E+01 + 0.1376238033277799E+01 + 0.1371372275017186E+01 + 0.1366516688371961E+01 + 0.1361671255853737E+01 + 0.1356835960076563E+01 + 0.1352010783677786E+01 + 0.1347195709282232E+01 + 0.1342390719611198E+01 + 0.1337595797411626E+01 + 0.1332810925414633E+01 + 0.1328036086432242E+01 + 0.1323271263299743E+01 + 0.1318516438838827E+01 + 0.1313771595981488E+01 + 0.1309036717703076E+01 + 0.1304311786960963E+01 + 0.1299596786789784E+01 + 0.1294891700255342E+01 + 0.1290196510405392E+01 + 0.1285511200374289E+01 + 0.1280835753338522E+01 + 0.1276170152454436E+01 + 0.1271514380946040E+01 + 0.1266868422072971E+01 + 0.1262232259076036E+01 + 0.1257605875288885E+01 + 0.1252989254104676E+01 + 0.1248382378896089E+01 + 0.1243785233103753E+01 + 0.1239197800215625E+01 + 0.1234620063697927E+01 + 0.1230052007070639E+01 + 0.1225493613895453E+01 + 0.1220944867713986E+01 + 0.1216405752160301E+01 + 0.1211876250951653E+01 + 0.1207356347783689E+01 + 0.1202846026376391E+01 + 0.1198345270474119E+01 + 0.1193854063799859E+01 + 0.1189372390163447E+01 + 0.1184900233471234E+01 + 0.1180437577609954E+01 + 0.1175984406496860E+01 + 0.1171540704089852E+01 + 0.1167106454325424E+01 + 0.1162681641195088E+01 + 0.1158266248767914E+01 + 0.1153860261094125E+01 + 0.1149463662272792E+01 + 0.1145076436480747E+01 + 0.1140698567876405E+01 + 0.1136330040648386E+01 + 0.1131970839043980E+01 + 0.1127620947291477E+01 + 0.1123280349657704E+01 + 0.1118949030488877E+01 + 0.1114626974114892E+01 + 0.1110314164901938E+01 + 0.1106010587300681E+01 + 0.1101716225746925E+01 + 0.1097431064694601E+01 + 0.1093155088656801E+01 + 0.1088888282130235E+01 + 0.1084630629641013E+01 + 0.1080382115805380E+01 + 0.1076142725228134E+01 + 0.1071912442538101E+01 + 0.1067691252452156E+01 + 0.1063479139676989E+01 + 0.1059276088923569E+01 + 0.1055082084952023E+01 + 0.1050897112508092E+01 + 0.1046721156370395E+01 + 0.1042554201450817E+01 + 0.1038396232662224E+01 + 0.1034247234906573E+01 + 0.1030107193103703E+01 + 0.1025976092155922E+01 + 0.1021853916991131E+01 + 0.1017740652677570E+01 + 0.1013636284291631E+01 + 0.1009540796902266E+01 + 0.1005454175616455E+01 + 0.1001376405530004E+01 + 0.9973074717434626E+00 + 0.9932473594486947E+00 + 0.9891960538408222E+00 + 0.9851535401199605E+00 + 0.9811198035891964E+00 + 0.9770948295608745E+00 + 0.9730786033351214E+00 + 0.9690711102461746E+00 + 0.9650723356207394E+00 + 0.9610822647886161E+00 + 0.9571008831977427E+00 + 0.9531281763171670E+00 + 0.9491641296059401E+00 + 0.9452087285800578E+00 + 0.9412619587596579E+00 + 0.9373238056551850E+00 + 0.9333942548435715E+00 + 0.9294732919122113E+00 + 0.9255609024402506E+00 + 0.9216570720909891E+00 + 0.9177617865488667E+00 + 0.9138750314850666E+00 + 0.9099967926267089E+00 + 0.9061270557133659E+00 + 0.9022658064741322E+00 + 0.8984130307242603E+00 + 0.8945687143097578E+00 + 0.8907328430603657E+00 + 0.8869054028470981E+00 + 0.8830863795523722E+00 + 0.8792757590445648E+00 + 0.8754735272628858E+00 + 0.8716796701783821E+00 + 0.8678941737473341E+00 + 0.8641170239935017E+00 + 0.8603482069751500E+00 + 0.8565877087332094E+00 + 0.8528355153494365E+00 + 0.8490916129266161E+00 + 0.8453559875511456E+00 + 0.8416286253706357E+00 + 0.8379095125728075E+00 + 0.8341986353280280E+00 + 0.8304959798505035E+00 + 0.8268015323857561E+00 + 0.8231152791622854E+00 + 0.8194372064641970E+00 + 0.8157673006218730E+00 + 0.8121055479481095E+00 + 0.8084519347912915E+00 + 0.8048064475327097E+00 + 0.8011690725360417E+00 + 0.7975397962096563E+00 + 0.7939186050088284E+00 + 0.7903054853716641E+00 + 0.7867004237720012E+00 + 0.7831034067263945E+00 + 0.7795144207340147E+00 + 0.7759334523217345E+00 + 0.7723604880547229E+00 + 0.7687955144815054E+00 + 0.7652385182036044E+00 + 0.7616894858991894E+00 + 0.7581484042316690E+00 + 0.7546152598680910E+00 + 0.7510900394899885E+00 + 0.7475727297607138E+00 + 0.7440633173768504E+00 + 0.7405617890983928E+00 + 0.7370681316716148E+00 + 0.7335823318776376E+00 + 0.7301043765708434E+00 + 0.7266342525933310E+00 + 0.7231719467898447E+00 + 0.7197174460276918E+00 + 0.7162707371576954E+00 + 0.7128318070524071E+00 + 0.7094006426486960E+00 + 0.7059772308723769E+00 + 0.7025615586703867E+00 + 0.6991536130600363E+00 + 0.6957533810494626E+00 + 0.6923608496523387E+00 + 0.6889760059241080E+00 + 0.6855988369081947E+00 + 0.6822293296519075E+00 + 0.6788674712456783E+00 + 0.6755132487691383E+00 + 0.6721666493254038E+00 + 0.6688276601214374E+00 + 0.6654962683651019E+00 + 0.6621724612451130E+00 + 0.6588562259344774E+00 + 0.6555475495863959E+00 + 0.6522464193800570E+00 + 0.6489528226311512E+00 + 0.6456667466677638E+00 + 0.6423881787990327E+00 + 0.6391171063194792E+00 + 0.6358535165044334E+00 + 0.6325973966395831E+00 + 0.6293487341148046E+00 + 0.6261075163310429E+00 + 0.6228737306795981E+00 + 0.6196473645788045E+00 + 0.6164284054398194E+00 + 0.6132168406708227E+00 + 0.6100126577437194E+00 + 0.6068158441356859E+00 + 0.6036263873177227E+00 + 0.6004442748151853E+00 + 0.5972694941580499E+00 + 0.5941020328688175E+00 + 0.5909418785232401E+00 + 0.5877890187037317E+00 + 0.5846434409811404E+00 + 0.5815051329600639E+00 + 0.5783740822464763E+00 + 0.5752502764363228E+00 + 0.5721337031748099E+00 + 0.5690243501172384E+00 + 0.5659222049132917E+00 + 0.5628272553022521E+00 + 0.5597394890553197E+00 + 0.5566588939228288E+00 + 0.5535854576216806E+00 + 0.5505191678420713E+00 + 0.5474600122695678E+00 + 0.5444079787140298E+00 + 0.5413630550461132E+00 + 0.5383252291174645E+00 + 0.5352944887545358E+00 + 0.5322708217608938E+00 + 0.5292542159289115E+00 + 0.5262446591293163E+00 + 0.5232421392778307E+00 + 0.5202466442749541E+00 + 0.5172581620396940E+00 + 0.5142766804987900E+00 + 0.5113021875645657E+00 + 0.5083346711918559E+00 + 0.5053741193640930E+00 + 0.5024205200493758E+00 + 0.4994738612375177E+00 + 0.4965341309335392E+00 + 0.4936013171279896E+00 + 0.4906754078581284E+00 + 0.4877563912019868E+00 + 0.4848442552220919E+00 + 0.4819389879866849E+00 + 0.4790405775693486E+00 + 0.4761490120283475E+00 + 0.4732642794647559E+00 + 0.4703863680265600E+00 + 0.4675152658474251E+00 + 0.4646509610742534E+00 + 0.4617934418721777E+00 + 0.4589426963909754E+00 + 0.4560987128017962E+00 + 0.4532614793071955E+00 + 0.4504309840955466E+00 + 0.4476072153823668E+00 + 0.4447901614266235E+00 + 0.4419798104738600E+00 + 0.4391761507752081E+00 + 0.4363791705986776E+00 + 0.4335888581974513E+00 + 0.4308052018448780E+00 + 0.4280281898574296E+00 + 0.4252578105392690E+00 + 0.4224940522025797E+00 + 0.4197369031868166E+00 + 0.4169863518182142E+00 + 0.4142423864385485E+00 + 0.4115049954348629E+00 + 0.4087741671834310E+00 + 0.4060498900635842E+00 + 0.4033321524798660E+00 + 0.4006209428243467E+00 + 0.3979162494957483E+00 + 0.3952180609296887E+00 + 0.3925263655515136E+00 + 0.3898411517950327E+00 + 0.3871624081402512E+00 + 0.3844901230590784E+00 + 0.3818242850247228E+00 + 0.3791648825432459E+00 + 0.3765119041114085E+00 + 0.3738653382217303E+00 + 0.3712251733879231E+00 + 0.3685913981131747E+00 + 0.3659640009058298E+00 + 0.3633429703288671E+00 + 0.3607282949421522E+00 + 0.3581199633013459E+00 + 0.3555179639907992E+00 + 0.3529222855875347E+00 + 0.3503329166659937E+00 + 0.3477498458397217E+00 + 0.3451730617184474E+00 + 0.3426025529047490E+00 + 0.3400383080262941E+00 + 0.3374803157046199E+00 + 0.3349285645564947E+00 + 0.3323830432386143E+00 + 0.3298437404069325E+00 + 0.3273106447150163E+00 + 0.3247837448735720E+00 + 0.3222630295996002E+00 + 0.3197484875912964E+00 + 0.3172401075198563E+00 + 0.3147378780360229E+00 + 0.3122417877932877E+00 + 0.3097518255483526E+00 + 0.3072679800862205E+00 + 0.3047902401736513E+00 + 0.3023185945506031E+00 + 0.2998530319361006E+00 + 0.2973935410420314E+00 + 0.2949401106352593E+00 + 0.2924927294979902E+00 + 0.2900513864020875E+00 + 0.2876160701534912E+00 + 0.2851867695662441E+00 + 0.2827634734400881E+00 + 0.2803461705779986E+00 + 0.2779348497768412E+00 + 0.2755294998240587E+00 + 0.2731301095615504E+00 + 0.2707366678556448E+00 + 0.2683491635572602E+00 + 0.2659675855074861E+00 + 0.2635919225351148E+00 + 0.2612221634579063E+00 + 0.2588582971446181E+00 + 0.2565003124934237E+00 + 0.2541481983883211E+00 + 0.2518019437153810E+00 + 0.2494615373579262E+00 + 0.2471269681858974E+00 + 0.2447982250948836E+00 + 0.2424752969976948E+00 + 0.2401581727940818E+00 + 0.2378468414080619E+00 + 0.2355412917825431E+00 + 0.2332415128462224E+00 + 0.2309474935284484E+00 + 0.2286592227582010E+00 + 0.2263766894507358E+00 + 0.2240998825480767E+00 + 0.2218287910197469E+00 + 0.2195634038219739E+00 + 0.2173037099173448E+00 + 0.2150496982770850E+00 + 0.2128013578585740E+00 + 0.2105586776323355E+00 + 0.2083216465876811E+00 + 0.2060902537006814E+00 + 0.2038644879570108E+00 + 0.2016443383594566E+00 + 0.1994297938976257E+00 + 0.1972208435693543E+00 + 0.1950174763904020E+00 + 0.1928196813635836E+00 + 0.1906274474962538E+00 + 0.1884407638109030E+00 + 0.1862596193171810E+00 + 0.1840840030328714E+00 + 0.1819139039994702E+00 + 0.1797493112466484E+00 + 0.1775902138052743E+00 + 0.1754366007208608E+00 + 0.1732884610265714E+00 + 0.1711457837593268E+00 + 0.1690085579782330E+00 + 0.1668767727312716E+00 + 0.1647504170665047E+00 + 0.1626294800497200E+00 + 0.1605139507354740E+00 + 0.1584038181783979E+00 + 0.1562990714537117E+00 + 0.1541996996262686E+00 + 0.1521056917597844E+00 + 0.1500170369386698E+00 + 0.1479337242375499E+00 + 0.1458557427276398E+00 + 0.1437830814979287E+00 + 0.1417157296276861E+00 + 0.1396536761925290E+00 + 0.1375969102880027E+00 + 0.1355454210009571E+00 + 0.1334991974145177E+00 + 0.1314582286347812E+00 + 0.1294225037604549E+00 + 0.1273920118927796E+00 + 0.1253667421821420E+00 + 0.1233466837782882E+00 + 0.1213318258360836E+00 + 0.1193221575756692E+00 + 0.1173176682220380E+00 + 0.1153183470008300E+00 + 0.1133241831909171E+00 + 0.1113351660747258E+00 + 0.1093512849354623E+00 + 0.1073725291163070E+00 + 0.1053988879678897E+00 + 0.1034303508397483E+00 + 0.1014669071385448E+00 + 0.9950854627961864E-01 + 0.9755525767549422E-01 + 0.9560703079234472E-01 + 0.9366385510605491E-01 + 0.9172572008939138E-01 + 0.8979261527304763E-01 + 0.8786453020141762E-01 + 0.8594145441369888E-01 + 0.8402337749899548E-01 + 0.8211028905933270E-01 + 0.8020217869135465E-01 + 0.7829903604598060E-01 + 0.7640085079157476E-01 + 0.7450761258976481E-01 + 0.7261931115061736E-01 + 0.7073593620160322E-01 + 0.6885747746324280E-01 + 0.6698392470792411E-01 + 0.6511526773012648E-01 + 0.6325149631603249E-01 + 0.6139260029468753E-01 + 0.5953856951502380E-01 + 0.5768939381768262E-01 + 0.5584506309073798E-01 + 0.5400556724808279E-01 + 0.5217089619477199E-01 + 0.5034103987968999E-01 + 0.4851598827838382E-01 + 0.4669573135704892E-01 + 0.4488025912133291E-01 + 0.4306956160366243E-01 + 0.4126362882701496E-01 + 0.3946245085474509E-01 + 0.3766601778117560E-01 + 0.3587431969099371E-01 + 0.3408734670536656E-01 + 0.3230508897668432E-01 + 0.3052753664767674E-01 + 0.2875467989705372E-01 + 0.2698650893802632E-01 + 0.2522301397414386E-01 + 0.2346418524084800E-01 + 0.2171001300773180E-01 + 0.1996048753483777E-01 + 0.1821559911359102E-01 + 0.1647533807296561E-01 + 0.1473969473265663E-01 + 0.1300865944076717E-01 + 0.1128222258350103E-01 + 0.9560374538047517E-02 + 0.7843105708231626E-02 + 0.6130406537893904E-02 + 0.4422267462265373E-02 + 0.2718678940799221E-02 + 0.1019631473895234E-02 + -0.6748844462030151E-03 + -0.2364878304874631E-02 + -0.4050359544894415E-02 + -0.5731337616616087E-02 + -0.7407821950342576E-02 + -0.9079821933029431E-02 + -0.1074734695861962E-01 + -0.1241040640287976E-01 + -0.1406900959694046E-01 + -0.1572316587816877E-01 + -0.1737288456760189E-01 + -0.1901817494040084E-01 + -0.2065904627714356E-01 + -0.2229550784479501E-01 + -0.2392756886531423E-01 + -0.2555523856542292E-01 + -0.2717852615924304E-01 + -0.2879744081326158E-01 + -0.3041199169751823E-01 + -0.3202218797131127E-01 + -0.3362803874583971E-01 + -0.3522955313483012E-01 + -0.3682674024383314E-01 + -0.3841960913210754E-01 + -0.4000816886075585E-01 + -0.4159242848366541E-01 + -0.4317239700620309E-01 + -0.4474808343404483E-01 + -0.4631949676730740E-01 + -0.4788664595767588E-01 + -0.4944953995594253E-01 + -0.5100818770944474E-01 + -0.5256259811934170E-01 + -0.5411278008513029E-01 + -0.5565874250303388E-01 + -0.5720049421856265E-01 + -0.5873804407300942E-01 + -0.6027140090751910E-01 + -0.6180057352084662E-01 + -0.6332557070828379E-01 + -0.6484640126415043E-01 + -0.6636307393144001E-01 + -0.6787559744537526E-01 + -0.6938398054288287E-01 + -0.7088823191824627E-01 + -0.7238836025904715E-01 + -0.7388437425465140E-01 + -0.7537628254739093E-01 + -0.7686409376950793E-01 + -0.7834781655659602E-01 + -0.7982745950227320E-01 + -0.8130303119005095E-01 + -0.8277454020708591E-01 + -0.8424199509581438E-01 + -0.8570540438537533E-01 + -0.8716477660961692E-01 + -0.8862012026138721E-01 + -0.9007144381975575E-01 + -0.9151875576924503E-01 + -0.9296206455538897E-01 + -0.9440137860873721E-01 + -0.9583670636539365E-01 + -0.9726805621930112E-01 + -0.9869543654530098E-01 + -0.1001188557248388E+00 + -0.1015383221047510E+00 + -0.1029538440147939E+00 + -0.1043654297913862E+00 + -0.1057730877334438E+00 + -0.1071768261184134E+00 + -0.1085766532307748E+00 + -0.1099725773199859E+00 + -0.1113646066130855E+00 + -0.1127527493444867E+00 + -0.1141370137165813E+00 + -0.1155174079088666E+00 + -0.1168939401083896E+00 + -0.1182666184715763E+00 + -0.1196354511303092E+00 + -0.1210004462240010E+00 + -0.1223616118609252E+00 + -0.1237189561214033E+00 + -0.1250724870933169E+00 + -0.1264222128372588E+00 + -0.1277681413864662E+00 + -0.1291102807817448E+00 + -0.1304486390376613E+00 + -0.1317832241394443E+00 + -0.1331140440797578E+00 + -0.1344411068279770E+00 + -0.1357644203242681E+00 + -0.1370839925160215E+00 + -0.1383998313256627E+00 + -0.1397119446409755E+00 + -0.1410203403565371E+00 + -0.1423250263480994E+00 + -0.1436260104614945E+00 + -0.1449233005493439E+00 + -0.1462169044438899E+00 + -0.1475068299417283E+00 + -0.1487930848455189E+00 + -0.1500756769408169E+00 + -0.1513546139790102E+00 + -0.1526299037172664E+00 + -0.1539015538966511E+00 + -0.1551695722220249E+00 + -0.1564339664033923E+00 + -0.1576947441363766E+00 + -0.1589519130797505E+00 + -0.1602054808968432E+00 + -0.1614554552390486E+00 + -0.1627018437219432E+00 + -0.1639446539652116E+00 + -0.1651838935768615E+00 + -0.1664195701256606E+00 + -0.1676516911833881E+00 + -0.1688802643122198E+00 + -0.1701052970358884E+00 + -0.1713267968805374E+00 + -0.1725447713649742E+00 + -0.1737592279713988E+00 + -0.1749701741839488E+00 + -0.1761776174788645E+00 + -0.1773815652899079E+00 + -0.1785820250508762E+00 + -0.1797790041916828E+00 + -0.1809725101080152E+00 + -0.1821625501962856E+00 + -0.1833491318473565E+00 + -0.1845322624079543E+00 + -0.1857119492224015E+00 + -0.1868881996331242E+00 + -0.1880610209476111E+00 + -0.1892304204720043E+00 + -0.1903964055104291E+00 + -0.1915589833275307E+00 + -0.1927181611842974E+00 + -0.1938739463403199E+00 + -0.1950263460141101E+00 + -0.1961753674187620E+00 + -0.1973210177683901E+00 + -0.1984633042439064E+00 + -0.1996022340218723E+00 + -0.2007378142796291E+00 + -0.2018700521560629E+00 + -0.2029989547825502E+00 + -0.2041245292916672E+00 + -0.2052467827757905E+00 + -0.2063657223175365E+00 + -0.2074813550030048E+00 + -0.2085936878893193E+00 + -0.2097027280267548E+00 + -0.2108084824681349E+00 + -0.2119109582267466E+00 + -0.2130101623027632E+00 + -0.2141061017004420E+00 + -0.2151987833932655E+00 + -0.2162882143439417E+00 + -0.2173744015191597E+00 + -0.2184573518503248E+00 + -0.2195370722538701E+00 + -0.2206135696512860E+00 + -0.2216868509364421E+00 + -0.2227569229906449E+00 + -0.2238237927000162E+00 + -0.2248874669171936E+00 + -0.2259479524766457E+00 + -0.2270052562183304E+00 + -0.2280593849550591E+00 + -0.2291103454835548E+00 + -0.2301581446060721E+00 + -0.2312027890956043E+00 + -0.2322442857053576E+00 + -0.2332826411947877E+00 + -0.2343178623048956E+00 + -0.2353499557632814E+00 + -0.2363789283024574E+00 + -0.2374047866079827E+00 + -0.2384275373250707E+00 + -0.2394471871056203E+00 + -0.2404637426078249E+00 + -0.2414772104962808E+00 + -0.2424875974418340E+00 + -0.2434949100722816E+00 + -0.2444991549706137E+00 + -0.2455003387249122E+00 + -0.2464984679084999E+00 + -0.2474935490771757E+00 + -0.2484855887930885E+00 + -0.2494745936070025E+00 + -0.2504605700541008E+00 + -0.2514435246750873E+00 + -0.2524234639669237E+00 + -0.2534003943664302E+00 + -0.2543743223142262E+00 + -0.2553452542734230E+00 + -0.2563131967357525E+00 + -0.2572781562015943E+00 + -0.2582401391146608E+00 + -0.2591991518265008E+00 + -0.2601552006882995E+00 + -0.2611082920749243E+00 + -0.2620584323955931E+00 + -0.2630056280695518E+00 + -0.2639498854717376E+00 + -0.2648912108895419E+00 + -0.2658296106081682E+00 + -0.2667650909277323E+00 + -0.2676976581701667E+00 + -0.2686273186667521E+00 + -0.2695540787166303E+00 + -0.2704779445402771E+00 + -0.2713989223547040E+00 + -0.2723170183884192E+00 + -0.2732322388864114E+00 + -0.2741445901026681E+00 + -0.2750540782680635E+00 + -0.2759607095418017E+00 + -0.2768644900782002E+00 + -0.2777654260303167E+00 + -0.2786635235337398E+00 + -0.2795587887273432E+00 + -0.2804512277505331E+00 + -0.2813408467284562E+00 + -0.2822276517897042E+00 + -0.2831116490532637E+00 + -0.2839928445877733E+00 + -0.2848712444572729E+00 + -0.2857468547182527E+00 + -0.2866196813791158E+00 + -0.2874897304429449E+00 + -0.2883570079214362E+00 + -0.2892215198383412E+00 + -0.2900832722260472E+00 + -0.2909422711094703E+00 + -0.2917985224547440E+00 + -0.2926520322170821E+00 + -0.2935028063487253E+00 + -0.2943508507589516E+00 + -0.2951961713491117E+00 + -0.2960387740263879E+00 + -0.2968786646973360E+00 + -0.2977158492731879E+00 + -0.2985503336631790E+00 + -0.2993821237293353E+00 + -0.3002112253211522E+00 + -0.3010376442883792E+00 + -0.3018613864431649E+00 + -0.3026824575870831E+00 + -0.3035008635286252E+00 + -0.3043166100819861E+00 + -0.3051297030678910E+00 + -0.3059401483039126E+00 + -0.3067479515339183E+00 + -0.3075531184707579E+00 + -0.3083556548340499E+00 + -0.3091555663499035E+00 + -0.3099528587511988E+00 + -0.3107475377731554E+00 + -0.3115396091128059E+00 + -0.3123290784489480E+00 + -0.3131159514636612E+00 + -0.3139002338092844E+00 + -0.3146819311228555E+00 + -0.3154610490461503E+00 + -0.3162375932054334E+00 + -0.3170115692191169E+00 + -0.3177829827105348E+00 + -0.3185518392870075E+00 + -0.3193181445463780E+00 + -0.3200819040890941E+00 + -0.3208431234636907E+00 + -0.3216018081800192E+00 + -0.3223579637537342E+00 + -0.3231115957111518E+00 + -0.3238627095886228E+00 + -0.3246113109273562E+00 + -0.3253574052362644E+00 + -0.3261009979954915E+00 + -0.3268420946892211E+00 + -0.3275807007778516E+00 + -0.3283168216984381E+00 + -0.3290504628927448E+00 + -0.3297816297920772E+00 + -0.3305103278161259E+00 + -0.3312365623895363E+00 + -0.3319603389205428E+00 + -0.3326816627973653E+00 + -0.3334005394124624E+00 + -0.3341169741347794E+00 + -0.3348309723021369E+00 + -0.3355425392561624E+00 + -0.3362516803319240E+00 + -0.3369584008532407E+00 + -0.3376627061486749E+00 + -0.3383646015292299E+00 + -0.3390640922769828E+00 + -0.3397611836773983E+00 + -0.3404558810104649E+00 + -0.3411481895435706E+00 + -0.3418381145484913E+00 + -0.3425256612795378E+00 + -0.3432108349559905E+00 + -0.3438936407991446E+00 + -0.3445740840180447E+00 + -0.3452521697930060E+00 + -0.3459279033066895E+00 + -0.3466012897431219E+00 + -0.3472723342825320E+00 + -0.3479410421100458E+00 + -0.3486074183920258E+00 + -0.3492714682451412E+00 + -0.3499331967846459E+00 + -0.3505926091322364E+00 + -0.3512497104164314E+00 + -0.3519045057719641E+00 + -0.3525570003087894E+00 + -0.3532071990606301E+00 + -0.3538551070537215E+00 + -0.3545007293272748E+00 + -0.3551440709467025E+00 + -0.3557851369871312E+00 + -0.3564239325086438E+00 + -0.3570604625101194E+00 + -0.3576947319830823E+00 + -0.3583267459261054E+00 + -0.3589565093474580E+00 + -0.3595840272622080E+00 + -0.3602093046683125E+00 + -0.3608323464813776E+00 + -0.3614531576018045E+00 + -0.3620717429433883E+00 + -0.3626881074573298E+00 + -0.3633022561089918E+00 + -0.3639141938537963E+00 + -0.3645239255801650E+00 + -0.3651314561614318E+00 + -0.3657367904723706E+00 + -0.3663399333714906E+00 + -0.3669408897161581E+00 + -0.3675396643668803E+00 + -0.3681362621753052E+00 + -0.3687306879938155E+00 + -0.3693229466709617E+00 + -0.3699130430026689E+00 + -0.3705009817686134E+00 + -0.3710867677550605E+00 + -0.3716704057602516E+00 + -0.3722519005907038E+00 + -0.3728312570493258E+00 + -0.3734084798759494E+00 + -0.3739835737852472E+00 + -0.3745565434973481E+00 + -0.3751273937379684E+00 + -0.3756961292384191E+00 + -0.3762627547321963E+00 + -0.3768272749275265E+00 + -0.3773896945218329E+00 + -0.3779500182141773E+00 + -0.3785082506714281E+00 + -0.3790643965441953E+00 + -0.3796184604875360E+00 + -0.3801704471531337E+00 + -0.3807203611926097E+00 + -0.3812682072589690E+00 + -0.3818139899605274E+00 + -0.3823577138769258E+00 + -0.3828993835924406E+00 + -0.3834390036950470E+00 + -0.3839765787768624E+00 + -0.3845121134334058E+00 + -0.3850456122342747E+00 + -0.3855770797294063E+00 + -0.3861065204725786E+00 + -0.3866339390083496E+00 + -0.3871593398739857E+00 + -0.3876827276093808E+00 + -0.3882041067127394E+00 + -0.3887234816434282E+00 + -0.3892408568650266E+00 + -0.3897562368623842E+00 + -0.3902696261419037E+00 + -0.3907810292144447E+00 + -0.3912904505535662E+00 + -0.3917978945911667E+00 + -0.3923033657614420E+00 + -0.3928068684881588E+00 + -0.3933084071816161E+00 + -0.3938079862558378E+00 + -0.3943056101168008E+00 + -0.3948012831585495E+00 + -0.3952950097786806E+00 + -0.3957867943593085E+00 + -0.3962766412587469E+00 + -0.3967645548380439E+00 + -0.3972505394525914E+00 + -0.3977345994465135E+00 + -0.3982167391673835E+00 + -0.3986969629506067E+00 + -0.3991752751081777E+00 + -0.3996516799542762E+00 + -0.4001261817926211E+00 + -0.4005987849041558E+00 + -0.4010694935718173E+00 + -0.4015383120723373E+00 + -0.4020052446655929E+00 + -0.4024702956138385E+00 + -0.4029334691763550E+00 + -0.4033947696005344E+00 + -0.4038542011364624E+00 + -0.4043117680192541E+00 + -0.4047674744428781E+00 + -0.4052213245996634E+00 + -0.4056733226850120E+00 + -0.4061234728946676E+00 + -0.4065717794285048E+00 + -0.4070182464766957E+00 + -0.4074628781941029E+00 + -0.4079056787335262E+00 + -0.4083466522488421E+00 + -0.4087858028875054E+00 + -0.4092231347996420E+00 + -0.4096586521227635E+00 + -0.4100923589416889E+00 + -0.4105242593341117E+00 + -0.4109543573896051E+00 + -0.4113826572284159E+00 + -0.4118091629813937E+00 + -0.4122338787633671E+00 + -0.4126568086115360E+00 + -0.4130779565473363E+00 + -0.4134973266000995E+00 + -0.4139149228179984E+00 + -0.4143307492577104E+00 + -0.4147448099707921E+00 + -0.4151571089668284E+00 + -0.4155676502461238E+00 + -0.4159764378120926E+00 + -0.4163834756650036E+00 + -0.4167887678071851E+00 + -0.4171923182403424E+00 + -0.4175941309408638E+00 + -0.4179942098790217E+00 + -0.4183925590217448E+00 + -0.4187891822907351E+00 + -0.4191840835927985E+00 + -0.4195772668416968E+00 + -0.4199687359732741E+00 + -0.4203584949353497E+00 + -0.4207465476730882E+00 + -0.4211328980810162E+00 + -0.4215175500325544E+00 + -0.4219005074052193E+00 + -0.4222817740793889E+00 + -0.4226613539390730E+00 + -0.4230392508685098E+00 + -0.4234154687169750E+00 + -0.4237900113165180E+00 + -0.4241628825028384E+00 + -0.4245340861109098E+00 + -0.4249036259770279E+00 + -0.4252715059386692E+00 + -0.4256377298010928E+00 + -0.4260023013502013E+00 + -0.4263652243753987E+00 + -0.4267265026651691E+00 + -0.4270861400086254E+00 + -0.4274441401967876E+00 + -0.4278005069910101E+00 + -0.4281552441310423E+00 + -0.4285083553598101E+00 + -0.4288598444176645E+00 + -0.4292097150435627E+00 + -0.4295579709792005E+00 + -0.4299046159455545E+00 + -0.4302496536454828E+00 + -0.4305930877850476E+00 + -0.4309349220703128E+00 + -0.4312751602074727E+00 + -0.4316138059052265E+00 + -0.4319508628387195E+00 + -0.4322863346476222E+00 + -0.4326202249738701E+00 + -0.4329525374646075E+00 + -0.4332832757723368E+00 + -0.4336124435532554E+00 + -0.4339400444510403E+00 + -0.4342660820929696E+00 + -0.4345905601084724E+00 + -0.4349134821038668E+00 + -0.4352348516531934E+00 + -0.4355546723322157E+00 + -0.4358729477327082E+00 + -0.4361896814678569E+00 + -0.4365048771555889E+00 + -0.4368185383767023E+00 + -0.4371306686512570E+00 + -0.4374412714977268E+00 + -0.4377503504499376E+00 + -0.4380579090651516E+00 + -0.4383639509062702E+00 + -0.4386684795158688E+00 + -0.4389714983953738E+00 + -0.4392730110452009E+00 + -0.4395730209665386E+00 + -0.4398715316581512E+00 + -0.4401685466218690E+00 + -0.4404640693491730E+00 + -0.4407581033041053E+00 + -0.4410506519503886E+00 + -0.4413417187526391E+00 + -0.4416313071722250E+00 + -0.4419194206732832E+00 + -0.4422060627061529E+00 + -0.4424912366788355E+00 + -0.4427749459956710E+00 + -0.4430571940694166E+00 + -0.4433379843298600E+00 + -0.4436173202129358E+00 + -0.4438952051446885E+00 + -0.4441716425121309E+00 + -0.4444466356976774E+00 + -0.4447201880802642E+00 + -0.4449923030178132E+00 + -0.4452629838666708E+00 + -0.4455322339855973E+00 + -0.4458000567321891E+00 + -0.4460664554666066E+00 + -0.4463314335455643E+00 + -0.4465949943000332E+00 + -0.4468571410570866E+00 + -0.4471178771419245E+00 + -0.4473772058583898E+00 + -0.4476351305069146E+00 + -0.4478916543879467E+00 + -0.4481467807876402E+00 + -0.4484005129902307E+00 + -0.4486528542810978E+00 + -0.4489038079358080E+00 + -0.4491533772289922E+00 + -0.4494015654325873E+00 + -0.4496483757845851E+00 + -0.4498938115126618E+00 + -0.4501378758508717E+00 + -0.4503805720555471E+00 + -0.4506219033941468E+00 + -0.4508618731277118E+00 + -0.4511004844483690E+00 + -0.4513377405198422E+00 + -0.4515736445122768E+00 + -0.4518081996239454E+00 + -0.4520414090684406E+00 + -0.4522732760599104E+00 + -0.4525038037892130E+00 + -0.4527329954367056E+00 + -0.4529608541808241E+00 + -0.4531873831516966E+00 + -0.4534125854534960E+00 + -0.4536364641964758E+00 + -0.4538590225272932E+00 + -0.4540802636163773E+00 + -0.4543001906339964E+00 + -0.4545188067061506E+00 + -0.4547361149303207E+00 + -0.4549521184068095E+00 + -0.4551668202397236E+00 + -0.4553802235368573E+00 + -0.4555923314063996E+00 + -0.4558031469137160E+00 + -0.4560126730911566E+00 + -0.4562209129753344E+00 + -0.4564278696402095E+00 + -0.4566335461921042E+00 + -0.4568379457386098E+00 + -0.4570410713302425E+00 + -0.4572429259649910E+00 + -0.4574435126425851E+00 + -0.4576428343793770E+00 + -0.4578408942083648E+00 + -0.4580376951656128E+00 + -0.4582332402692344E+00 + -0.4584275325175846E+00 + -0.4586205749109482E+00 + -0.4588123704479191E+00 + -0.4590029221245330E+00 + -0.4591922329388535E+00 + -0.4593803058597983E+00 + -0.4595671438182663E+00 + -0.4597527497460018E+00 + -0.4599371265936314E+00 + -0.4601202773366556E+00 + -0.4603022049548027E+00 + -0.4604829124005771E+00 + -0.4606624025841033E+00 + -0.4608406784149056E+00 + -0.4610177428059536E+00 + -0.4611935986738564E+00 + -0.4613682489382636E+00 + -0.4615416965099156E+00 + -0.4617139442814152E+00 + -0.4618849951462238E+00 + -0.4620548519922635E+00 + -0.4622235176939674E+00 + -0.4623909951269226E+00 + -0.4625572871624989E+00 + -0.4627223966598931E+00 + -0.4628863264793989E+00 + -0.4630490794721922E+00 + -0.4632106584647890E+00 + -0.4633710662829148E+00 + -0.4635303057632298E+00 + -0.4636883797650683E+00 + -0.4638452911537542E+00 + -0.4640010427652658E+00 + -0.4641556373507898E+00 + -0.4643090776497410E+00 + -0.4644613664298555E+00 + -0.4646125065370716E+00 + -0.4647625008342101E+00 + -0.4649113521557378E+00 + -0.4650590632373206E+00 + -0.4652056367969365E+00 + -0.4653510755645861E+00 + -0.4654953823055966E+00 + -0.4656385597954275E+00 + -0.4657806108054468E+00 + -0.4659215380825646E+00 + -0.4660613443699343E+00 + -0.4662000324051745E+00 + -0.4663376048927555E+00 + -0.4664740645303944E+00 + -0.4666094140230920E+00 + -0.4667436560994298E+00 + -0.4668767934969305E+00 + -0.4670088289469236E+00 + -0.4671397651369516E+00 + -0.4672696047424482E+00 + -0.4673983504379845E+00 + -0.4675260048801711E+00 + -0.4676525707211422E+00 + -0.4677780506187145E+00 + -0.4679024472514358E+00 + -0.4680257633075377E+00 + -0.4681480014706962E+00 + -0.4682691643769148E+00 + -0.4683892546438692E+00 + -0.4685082748923103E+00 + -0.4686262277486712E+00 + -0.4687431158434789E+00 + -0.4688589418060865E+00 + -0.4689737082357940E+00 + -0.4690874177183505E+00 + -0.4692000728445611E+00 + -0.4693116762305941E+00 + -0.4694222305075806E+00 + -0.4695317383039440E+00 + -0.4696402021937232E+00 + -0.4697476247201383E+00 + -0.4698540084290356E+00 + -0.4699593558733167E+00 + -0.4700636696113500E+00 + -0.4701669522046308E+00 + -0.4702692062225546E+00 + -0.4703704342408069E+00 + -0.4704706388339701E+00 + -0.4705698225238276E+00 + -0.4706679877932030E+00 + -0.4707651371283359E+00 + -0.4708612730477314E+00 + -0.4709563980966276E+00 + -0.4710505148217822E+00 + -0.4711436257389135E+00 + -0.4712357333366926E+00 + -0.4713268401049024E+00 + -0.4714169485260995E+00 + -0.4715060610760561E+00 + -0.4715941802322584E+00 + -0.4716813084629269E+00 + -0.4717674482266067E+00 + -0.4718526019839299E+00 + -0.4719367722008761E+00 + -0.4720199613491106E+00 + -0.4721021719022879E+00 + -0.4721834063120667E+00 + -0.4722636670028506E+00 + -0.4723429563996829E+00 + -0.4724212769269492E+00 + -0.4724986310073769E+00 + -0.4725750210656955E+00 + -0.4726504495186187E+00 + -0.4727249187703523E+00 + -0.4727984312264385E+00 + -0.4728709892951323E+00 + -0.4729425953875277E+00 + -0.4730132519168114E+00 + -0.4730829612669965E+00 + -0.4731517257713680E+00 + -0.4732195477607784E+00 + -0.4732864295928725E+00 + -0.4733523736722433E+00 + -0.4734173824104738E+00 + -0.4734814581936107E+00 + -0.4735446033545342E+00 + -0.4736068202219615E+00 + -0.4736681111270996E+00 + -0.4737284784037584E+00 + -0.4737879243881440E+00 + -0.4738464514118547E+00 + -0.4739040617923816E+00 + -0.4739607578472074E+00 + -0.4740165418932193E+00 + -0.4740714162420413E+00 + -0.4741253832064384E+00 + -0.4741784450917776E+00 + -0.4742306041783571E+00 + -0.4742818627440278E+00 + -0.4743322230704540E+00 + -0.4743816874461941E+00 + -0.4744302581630119E+00 + -0.4744779375064531E+00 + -0.4745247277356195E+00 + -0.4745706311058712E+00 + -0.4746156498736943E+00 + -0.4746597862935542E+00 + -0.4747030426212138E+00 + -0.4747454211071226E+00 + -0.4747869239732730E+00 + -0.4748275534361518E+00 + -0.4748673117171618E+00 + -0.4749062010517601E+00 + -0.4749442236809374E+00 + -0.4749813818445755E+00 + -0.4750176777684048E+00 + -0.4750531136754265E+00 + -0.4750876917795269E+00 + -0.4751214142362096E+00 + -0.4751542831830322E+00 + -0.4751863007712910E+00 + -0.4752174692223294E+00 + -0.4752477907843772E+00 + -0.4752772676928984E+00 + -0.4753059020885265E+00 + -0.4753336960755505E+00 + -0.4753606517686429E+00 + -0.4753867713438859E+00 + -0.4754120570052017E+00 + -0.4754365109503230E+00 + -0.4754601353125365E+00 + -0.4754829321958461E+00 + -0.4755049037092817E+00 + -0.4755260519907642E+00 + -0.4755463791941028E+00 + -0.4755658874711392E+00 + -0.4755845789350992E+00 + -0.4756024556785715E+00 + -0.4756195197957867E+00 + -0.4756357733807764E+00 + -0.4756512185282781E+00 + -0.4756658573363367E+00 + -0.4756796919197586E+00 + -0.4756927244051147E+00 + -0.4757049569171748E+00 + -0.4757163915279850E+00 + -0.4757270302724941E+00 + -0.4757368751875958E+00 + -0.4757459283235304E+00 + -0.4757541917413446E+00 + -0.4757616675048229E+00 + -0.4757683576875393E+00 + -0.4757742643716211E+00 + -0.4757793896393941E+00 + -0.4757837355348341E+00 + -0.4757873040671926E+00 + -0.4757900972467350E+00 + -0.4757921170934864E+00 + -0.4757933656371241E+00 + -0.4757938449089163E+00 + -0.4757935569227005E+00 + -0.4757925036735569E+00 + -0.4757906871580516E+00 + -0.4757881093903115E+00 + -0.4757847724044725E+00 + -0.4757806782365238E+00 + -0.4757758288827382E+00 + -0.4757702262890723E+00 + -0.4757638724007339E+00 + -0.4757567691917862E+00 + -0.4757489186748252E+00 + -0.4757403228662411E+00 + -0.4757309837422766E+00 + -0.4757209032190383E+00 + -0.4757100832100010E+00 + -0.4756985256598269E+00 + -0.4756862325619435E+00 + -0.4756732059155461E+00 + -0.4756594476889258E+00 + -0.4756449597952207E+00 + -0.4756297441437829E+00 + -0.4756138026492395E+00 + -0.4755971372345057E+00 + -0.4755797498250903E+00 + -0.4755616423469999E+00 + -0.4755428167252648E+00 + -0.4755232748863859E+00 + -0.4755030187444541E+00 + -0.4754820501834390E+00 + -0.4754603710848425E+00 + -0.4754379833402719E+00 + -0.4754148888633391E+00 + -0.4753910895725101E+00 + -0.4753665873698314E+00 + -0.4753413841104703E+00 + -0.4753154816433937E+00 + -0.4752888818270186E+00 + -0.4752615865438258E+00 + -0.4752335976821543E+00 + -0.4752049171196211E+00 + -0.4751755466956399E+00 + -0.4751454882434669E+00 + -0.4751147436042138E+00 + -0.4750833146419522E+00 + -0.4750512032271818E+00 + -0.4750184112205790E+00 + -0.4749849404401021E+00 + -0.4749507926948352E+00 + -0.4749159697955950E+00 + -0.4748804735548329E+00 + -0.4748443057867300E+00 + -0.4748074683084877E+00 + -0.4747699629448548E+00 + -0.4747317915240106E+00 + -0.4746929558713679E+00 + -0.4746534577912163E+00 + -0.4746132990823908E+00 + -0.4745724815398774E+00 + -0.4745310069294418E+00 + -0.4744888770079021E+00 + -0.4744460935387193E+00 + -0.4744026583171882E+00 + -0.4743585731516750E+00 + -0.4743138398447134E+00 + -0.4742684601496856E+00 + -0.4742224358007608E+00 + -0.4741757685367039E+00 + -0.4741284601199911E+00 + -0.4740805123246665E+00 + -0.4740319269219518E+00 + -0.4739827056474376E+00 + -0.4739328502201683E+00 + -0.4738823623626395E+00 + -0.4738312438163257E+00 + -0.4737794963335713E+00 + -0.4737271216653010E+00 + -0.4736741215321571E+00 + -0.4736204976379874E+00 + -0.4735662516885189E+00 + -0.4735113853963106E+00 + -0.4734559004788187E+00 + -0.4733997986533315E+00 + -0.4733430816154753E+00 + -0.4732857510466476E+00 + -0.4732278086310230E+00 + -0.4731692560750322E+00 + -0.4731100951019660E+00 + -0.4730503274334515E+00 + -0.4729899547346672E+00 + -0.4729289786259214E+00 + -0.4728674007307186E+00 + -0.4728052227271110E+00 + -0.4727424463406866E+00 + -0.4726790732971724E+00 + -0.4726151052618039E+00 + -0.4725505438430512E+00 + -0.4724853906495198E+00 + -0.4724196473116596E+00 + -0.4723533154821372E+00 + -0.4722863968163526E+00 + -0.4722188929778040E+00 + -0.4721508056387615E+00 + -0.4720821364721010E+00 + -0.4720128871086406E+00 + -0.4719430591286240E+00 + -0.4718726541110526E+00 + -0.4718016736484207E+00 + -0.4717301193502569E+00 + -0.4716579928290230E+00 + -0.4715852957162720E+00 + -0.4715120296697500E+00 + -0.4714381963496446E+00 + -0.4713637973625763E+00 + -0.4712888342327377E+00 + -0.4712133084793456E+00 + -0.4711372216677533E+00 + -0.4710605754386742E+00 + -0.4709833714408584E+00 + -0.4709056112850242E+00 + -0.4708272965123261E+00 + -0.4707484286580859E+00 + -0.4706690092744494E+00 + -0.4705890399450518E+00 + -0.4705085222583552E+00 + -0.4704274577815463E+00 + -0.4703458480348869E+00 + -0.4702636945339668E+00 + -0.4701809988181338E+00 + -0.4700977624799165E+00 + -0.4700139871205541E+00 + -0.4699296743099829E+00 + -0.4698448255367180E+00 + -0.4697594422778033E+00 + -0.4696735260290886E+00 + -0.4695870783359047E+00 + -0.4695001007532451E+00 + -0.4694125948274359E+00 + -0.4693245620757121E+00 + -0.4692360040109845E+00 + -0.4691469221459364E+00 + -0.4690573179892420E+00 + -0.4689671930498636E+00 + -0.4688765488306465E+00 + -0.4687853868085968E+00 + -0.4686937084559363E+00 + -0.4686015152549587E+00 + -0.4685088087238782E+00 + -0.4684155903908836E+00 + -0.4683218617693182E+00 + -0.4682276243031622E+00 + -0.4681328794184934E+00 + -0.4680376285528194E+00 + -0.4679418731932025E+00 + -0.4678456148424501E+00 + -0.4677488549966880E+00 + -0.4676515951111435E+00 + -0.4675538366285954E+00 + -0.4674555809935265E+00 + -0.4673568296539193E+00 + -0.4672575840598653E+00 + -0.4671578456618492E+00 + -0.4670576159057002E+00 + -0.4669568962362438E+00 + -0.4668556880972139E+00 + -0.4667539929168280E+00 + -0.4666518121174531E+00 + -0.4665491471222935E+00 + -0.4664459993524303E+00 + -0.4663423702286588E+00 + -0.4662382611722088E+00 + -0.4661336735982759E+00 + -0.4660286089196492E+00 + -0.4659230685499312E+00 + -0.4658170538997238E+00 + -0.4657105663785645E+00 + -0.4656036073961381E+00 + -0.4654961783516971E+00 + -0.4653882806387789E+00 + -0.4652799156504345E+00 + -0.4651710847614755E+00 + -0.4650617893353298E+00 + -0.4649520307379589E+00 + -0.4648418103561748E+00 + -0.4647311295918341E+00 + -0.4646199898466642E+00 + -0.4645083924987384E+00 + -0.4643963389083829E+00 + -0.4642838304356689E+00 + -0.4641708684249277E+00 + -0.4640574542076888E+00 + -0.4639435891177336E+00 + -0.4638292745177300E+00 + -0.4637145117963558E+00 + -0.4635993023429589E+00 + -0.4634836475163195E+00 + -0.4633675486455831E+00 + -0.4632510070591700E+00 + -0.4631340240699919E+00 + -0.4630166009745914E+00 + -0.4628987390711862E+00 + -0.4627804396982115E+00 + -0.4626617042397535E+00 + -0.4625425340819418E+00 + -0.4624229305561471E+00 + -0.4623028949258577E+00 + -0.4621824284521514E+00 + -0.4620615324266040E+00 + -0.4619402081812091E+00 + -0.4618184570516247E+00 + -0.4616962803609466E+00 + -0.4615736794135009E+00 + -0.4614506555129200E+00 + -0.4613272099451105E+00 + -0.4612033439673962E+00 + -0.4610790588358830E+00 + -0.4609543558283059E+00 + -0.4608292362585746E+00 + -0.4607037014450036E+00 + -0.4605777526864067E+00 + -0.4604513912443534E+00 + -0.4603246183773944E+00 + -0.4601974353488119E+00 + -0.4600698434302967E+00 + -0.4599418438954915E+00 + -0.4598134380064193E+00 + -0.4596846269981620E+00 + -0.4595554121032099E+00 + -0.4594257945670694E+00 + -0.4592957756649351E+00 + -0.4591653566772972E+00 + -0.4590345388676770E+00 + -0.4589033234533077E+00 + -0.4587717116448618E+00 + -0.4586397046689434E+00 + -0.4585073037957375E+00 + -0.4583745103040953E+00 + -0.4582413254475742E+00 + -0.4581077503981260E+00 + -0.4579737863126118E+00 + -0.4578394343742104E+00 + -0.4577046958538221E+00 + -0.4575695720420255E+00 + -0.4574340642035876E+00 + -0.4572981735031495E+00 + -0.4571619010826180E+00 + -0.4570252481027073E+00 + -0.4568882157984292E+00 + -0.4567508054247470E+00 + -0.4566130182224335E+00 + -0.4564748553642769E+00 + -0.4563363180046105E+00 + -0.4561974073068434E+00 + -0.4560581244753132E+00 + -0.4559184707277512E+00 + -0.4557784472737919E+00 + -0.4556380552742568E+00 + -0.4554972958741181E+00 + -0.4553561702258000E+00 + -0.4552146795213102E+00 + -0.4550728249679671E+00 + -0.4549306077644105E+00 + -0.4547880290461722E+00 + -0.4546450899238698E+00 + -0.4545017915172843E+00 + -0.4543581350069866E+00 + -0.4542141216009267E+00 + -0.4540697525009364E+00 + -0.4539250288516141E+00 + -0.4537799517705892E+00 + -0.4536345223786514E+00 + -0.4534887418184367E+00 + -0.4533426112444753E+00 + -0.4531961318097834E+00 + -0.4530493046426677E+00 + -0.4529021308578198E+00 + -0.4527546115715349E+00 + -0.4526067479098078E+00 + -0.4524585410049946E+00 + -0.4523099919897372E+00 + -0.4521611019881254E+00 + -0.4520118721188439E+00 + -0.4518623035010537E+00 + -0.4517123972497136E+00 + -0.4515621544769898E+00 + -0.4514115762956786E+00 + -0.4512606638156478E+00 + -0.4511094181446627E+00 + -0.4509578403906841E+00 + -0.4508059316506672E+00 + -0.4506536930123096E+00 + -0.4505011255633387E+00 + -0.4503482303807054E+00 + -0.4501950085314592E+00 + -0.4500414610843198E+00 + -0.4498875891355484E+00 + -0.4497333938090071E+00 + -0.4495788762293964E+00 + -0.4494240374878574E+00 + -0.4492688786390108E+00 + -0.4491134007364739E+00 + -0.4489576048336538E+00 + -0.4488014919835507E+00 + -0.4486450632402600E+00 + -0.4484883196686306E+00 + -0.4483312623469702E+00 + -0.4481738923550635E+00 + -0.4480162107618825E+00 + -0.4478582186211057E+00 + -0.4476999169859198E+00 + -0.4475413068990882E+00 + -0.4473823893872925E+00 + -0.4472231654768327E+00 + -0.4470636362038390E+00 + -0.4469038026198898E+00 + -0.4467436657787652E+00 + -0.4465832267324602E+00 + -0.4464224865291221E+00 + -0.4462614462171552E+00 + -0.4461001068282691E+00 + -0.4459384693612687E+00 + -0.4457765348120616E+00 + -0.4456143041901997E+00 + -0.4454517785328428E+00 + -0.4452889588813219E+00 + -0.4451258462627326E+00 + -0.4449624416706037E+00 + -0.4447987460945755E+00 + -0.4446347605381063E+00 + -0.4444704860377509E+00 + -0.4443059236358288E+00 + -0.4441410743553727E+00 + -0.4439759391655634E+00 + -0.4438105190272214E+00 + -0.4436448149102058E+00 + -0.4434788278095859E+00 + -0.4433125587257715E+00 + -0.4431460086596065E+00 + -0.4429791786114500E+00 + -0.4428120695822341E+00 + -0.4426446825682850E+00 + -0.4424770185473929E+00 + -0.4423090784938662E+00 + -0.4421408633817638E+00 + -0.4419723741817931E+00 + -0.4418036118644611E+00 + -0.4416345773998038E+00 + -0.4414652717531718E+00 + -0.4412956958892579E+00 + -0.4411258507702780E+00 + -0.4409557373438561E+00 + -0.4407853565539021E+00 + -0.4406147093500660E+00 + -0.4404437967082416E+00 + -0.4402726196132960E+00 + -0.4401011790429788E+00 + -0.4399294759309997E+00 + -0.4397575111961192E+00 + -0.4395852857628455E+00 + -0.4394128005874746E+00 + -0.4392400566389846E+00 + -0.4390670548815260E+00 + -0.4388937962413946E+00 + -0.4387202816294875E+00 + -0.4385465119579316E+00 + -0.4383724881435645E+00 + -0.4381982111057898E+00 + -0.4380236817674091E+00 + -0.4378489010738631E+00 + -0.4376738699822358E+00 + -0.4374985894448868E+00 + -0.4373230603633339E+00 + -0.4371472836119526E+00 + -0.4369712600687493E+00 + -0.4367949906450383E+00 + -0.4366184762720159E+00 + -0.4364417178814083E+00 + -0.4362647164002232E+00 + -0.4360874727527327E+00 + -0.4359099878604133E+00 + -0.4357322626006837E+00 + -0.4355542978206854E+00 + -0.4353760943705859E+00 + -0.4351976531436429E+00 + -0.4350189750656497E+00 + -0.4348400610625380E+00 + -0.4346609120383472E+00 + -0.4344815288794385E+00 + -0.4343019124714905E+00 + -0.4341220636847087E+00 + -0.4339419833757390E+00 + -0.4337616724024695E+00 + -0.4335811316452912E+00 + -0.4334003620061243E+00 + -0.4332193643868566E+00 + -0.4330381396509791E+00 + -0.4328566886222157E+00 + -0.4326750121246618E+00 + -0.4324931110276725E+00 + -0.4323109862512713E+00 + -0.4321286387172916E+00 + -0.4319460692953355E+00 + -0.4317632787913865E+00 + -0.4315802680090001E+00 + -0.4313970377839592E+00 + -0.4312135889942738E+00 + -0.4310299225210300E+00 + -0.4308460392233934E+00 + -0.4306619399289247E+00 + -0.4304776254635546E+00 + -0.4302930966644066E+00 + -0.4301083543855770E+00 + -0.4299233994829931E+00 + -0.4297382327937710E+00 + -0.4295528551229110E+00 + -0.4293672672731526E+00 + -0.4291814700702817E+00 + -0.4289954643816740E+00 + -0.4288092510795515E+00 + -0.4286228310091553E+00 + -0.4284362049613987E+00 + -0.4282493737213927E+00 + -0.4280623380854195E+00 + -0.4278750988732033E+00 + -0.4276876569081106E+00 + -0.4275000130161454E+00 + -0.4273121680286319E+00 + -0.4271241227781961E+00 + -0.4269358780816392E+00 + -0.4267474347139867E+00 + -0.4265587934441715E+00 + -0.4263699550568919E+00 + -0.4261809203800619E+00 + -0.4259916902496774E+00 + -0.4258022654877972E+00 + -0.4256126468722275E+00 + -0.4254228351727935E+00 + -0.4252328311632374E+00 + -0.4250426356290470E+00 + -0.4248522493586738E+00 + -0.4246616731413914E+00 + -0.4244709077678154E+00 + -0.4242799540293550E+00 + -0.4240888127145705E+00 + -0.4238974845985867E+00 + -0.4237059704535875E+00 + -0.4235142710553256E+00 + -0.4233223871932752E+00 + -0.4231303196611703E+00 + -0.4229380692455091E+00 + -0.4227456366951667E+00 + -0.4225530227479974E+00 + -0.4223602281449193E+00 + -0.4221672536406921E+00 + -0.4219740999950767E+00 + -0.4217807679729810E+00 + -0.4215872583665711E+00 + -0.4213935719783256E+00 + -0.4211997095993796E+00 + -0.4210056719441583E+00 + -0.4208114596969491E+00 + -0.4206170735532695E+00 + -0.4204225142857155E+00 + -0.4202277827006313E+00 + -0.4200328795966199E+00 + -0.4198378057061844E+00 + -0.4196425617309149E+00 + -0.4194471483764027E+00 + -0.4192515663803536E+00 + -0.4190558164972635E+00 + -0.4188598994801484E+00 + -0.4186638160614300E+00 + -0.4184675669622680E+00 + -0.4182711529056700E+00 + -0.4180745746303531E+00 + -0.4178778328848023E+00 + -0.4176809284149614E+00 + -0.4174838619284681E+00 + -0.4172866341078924E+00 + -0.4170892456381534E+00 + -0.4168916972351465E+00 + -0.4166939896370806E+00 + -0.4164961235823730E+00 + -0.4162980997974072E+00 + -0.4160999189993629E+00 + -0.4159015819049517E+00 + -0.4157030892183322E+00 + -0.4155044416331947E+00 + -0.4153056398433262E+00 + -0.4151066845411176E+00 + -0.4149075764177398E+00 + -0.4147083161657061E+00 + -0.4145089044976826E+00 + -0.4143093421462253E+00 + -0.4141096298435831E+00 + -0.4139097682787255E+00 + -0.4137097580943242E+00 + -0.4135095999324432E+00 + -0.4133092944715891E+00 + -0.4131088424323898E+00 + -0.4129082445379119E+00 + -0.4127075014962000E+00 + -0.4125066139963078E+00 + -0.4123055827259934E+00 + -0.4121044083482904E+00 + -0.4119030914924127E+00 + -0.4117016327862868E+00 + -0.4115000328944311E+00 + -0.4112982925351224E+00 + -0.4110964124311425E+00 + -0.4108943932850810E+00 + -0.4106922357668664E+00 + -0.4104899405437142E+00 + -0.4102875082632797E+00 + -0.4100849395388268E+00 + -0.4098822349808861E+00 + -0.4096793952322125E+00 + -0.4094764209960613E+00 + -0.4092733129827280E+00 + -0.4090700718794076E+00 + -0.4088666983252182E+00 + -0.4086631929538110E+00 + -0.4084595564052818E+00 + -0.4082557893335718E+00 + -0.4080518923949246E+00 + -0.4078478662444308E+00 + -0.4076437115336479E+00 + -0.4074394289139943E+00 + -0.4072350190226056E+00 + -0.4070304824577144E+00 + -0.4068258198115350E+00 + -0.4066210317036918E+00 + -0.4064161188328547E+00 + -0.4062110819124394E+00 + -0.4060059216232245E+00 + -0.4058006385407154E+00 + -0.4055952332198112E+00 + -0.4053897062409609E+00 + -0.4051840582728425E+00 + -0.4049782900037872E+00 + -0.4047724021035911E+00 + -0.4045663951696200E+00 + -0.4043602697822357E+00 + -0.4041540265296187E+00 + -0.4039476660313946E+00 + -0.4037411889157825E+00 + -0.4035345958097593E+00 + -0.4033278873328994E+00 + -0.4031210641029766E+00 + -0.4029141267383245E+00 + -0.4027070758582584E+00 + -0.4024999120827153E+00 + -0.4022926360254417E+00 + -0.4020852482637776E+00 + -0.4018777493627855E+00 + -0.4016701398979795E+00 + -0.4014624205065031E+00 + -0.4012545918490233E+00 + -0.4010466545746648E+00 + -0.4008386092520957E+00 + -0.4006304564171217E+00 + -0.4004221966132029E+00 + -0.4002138304386280E+00 + -0.4000053585165284E+00 + -0.3997967814688040E+00 + -0.3995880999030832E+00 + -0.3993793144202495E+00 + -0.3991704256177917E+00 + -0.3989614340594092E+00 + -0.3987523402910267E+00 + -0.3985431448619925E+00 + -0.3983338483541306E+00 + -0.3981244513682140E+00 + -0.3979149545041531E+00 + -0.3977053583452316E+00 + -0.3974956634644548E+00 + -0.3972858704350163E+00 + -0.3970759798297454E+00 + -0.3968659922213560E+00 + -0.3966559081817902E+00 + -0.3964457282668729E+00 + -0.3962354530206233E+00 + -0.3960250829890726E+00 + -0.3958146187488643E+00 + -0.3956040609012490E+00 + -0.3953934100466773E+00 + -0.3951826667515745E+00 + -0.3949718315528804E+00 + -0.3947609049873174E+00 + -0.3945498875999457E+00 + -0.3943387799436943E+00 + -0.3941275825722352E+00 + -0.3939162960410028E+00 + -0.3937049209072170E+00 + -0.3934934577281044E+00 + -0.3932819070487153E+00 + -0.3930702694006190E+00 + -0.3928585453156174E+00 + -0.3926467353442714E+00 + -0.3924348400595052E+00 + -0.3922228600351260E+00 + -0.3920107958138679E+00 + -0.3917986478980682E+00 + -0.3915864167882548E+00 + -0.3913741030108109E+00 + -0.3911617071283108E+00 + -0.3909492297060762E+00 + -0.3907366712905924E+00 + -0.3905240323994150E+00 + -0.3903113135480507E+00 + -0.3900985152558197E+00 + -0.3898856380481167E+00 + -0.3896726824512868E+00 + -0.3894596489961978E+00 + -0.3892465382215502E+00 + -0.3890333506670526E+00 + -0.3888200868541336E+00 + -0.3886067472681144E+00 + -0.3883933323905965E+00 + -0.3881798427312133E+00 + -0.3879662788588804E+00 + -0.3877526413503284E+00 + -0.3875389307496142E+00 + -0.3873251475244812E+00 + -0.3871112921321976E+00 + -0.3868973650456295E+00 + -0.3866833667766172E+00 + -0.3864692978433799E+00 + -0.3862551587674325E+00 + -0.3860409500787643E+00 + -0.3858266723091165E+00 + -0.3856123259810194E+00 + -0.3853979115884190E+00 + -0.3851834296201569E+00 + -0.3849688805585913E+00 + -0.3847542648638444E+00 + -0.3845395829916995E+00 + -0.3843248354192658E+00 + -0.3841100227001330E+00 + -0.3838951454055163E+00 + -0.3836802040801790E+00 + -0.3834651991625980E+00 + -0.3832501310650683E+00 + -0.3830350002200266E+00 + -0.3828198071467074E+00 + -0.3826045523882485E+00 + -0.3823892364748805E+00 + -0.3821738598737454E+00 + -0.3819584230333797E+00 + -0.3817429264094944E+00 + -0.3815273704941309E+00 + -0.3813117557914312E+00 + -0.3810960827994352E+00 + -0.3808803519793681E+00 + -0.3806645637794972E+00 + -0.3804487186525339E+00 + -0.3802328170777981E+00 + -0.3800168595452017E+00 + -0.3798008465413659E+00 + -0.3795847785278159E+00 + -0.3793686559555618E+00 + -0.3791524792801844E+00 + -0.3789362489906877E+00 + -0.3787199655917743E+00 + -0.3785036295809606E+00 + -0.3782872413913188E+00 + -0.3780708014234860E+00 + -0.3778543100847342E+00 + -0.3776377678450478E+00 + -0.3774211752090381E+00 + -0.3772045326795235E+00 + -0.3769878407335461E+00 + -0.3767710998328768E+00 + -0.3765543104365079E+00 + -0.3763374729700428E+00 + -0.3761205878375233E+00 + -0.3759036554463180E+00 + -0.3756866762489946E+00 + -0.3754696507300252E+00 + -0.3752525793725004E+00 + -0.3750354626249469E+00 + -0.3748183009095783E+00 + -0.3746010946496183E+00 + -0.3743838442919445E+00 + -0.3741665503030572E+00 + -0.3739492131490807E+00 + -0.3737318332723507E+00 + -0.3735144110939074E+00 + -0.3732969470346007E+00 + -0.3730794415219810E+00 + -0.3728618949901161E+00 + -0.3726443078735231E+00 + -0.3724266806046263E+00 + -0.3722090136136335E+00 + -0.3719913073310256E+00 + -0.3717735621907742E+00 + -0.3715557786307888E+00 + -0.3713379570891760E+00 + -0.3711200979942501E+00 + -0.3709022017621649E+00 + -0.3706842688087775E+00 + -0.3704662995585819E+00 + -0.3702482944475389E+00 + -0.3700302539122296E+00 + -0.3698121783668559E+00 + -0.3695940681930006E+00 + -0.3693759237703804E+00 + -0.3691577455084294E+00 + -0.3689395338632569E+00 + -0.3687212892950755E+00 + -0.3685030122426272E+00 + -0.3682847031077111E+00 + -0.3680663622886462E+00 + -0.3678479901745260E+00 + -0.3676295871370702E+00 + -0.3674111535465620E+00 + -0.3671926898079496E+00 + -0.3669741963960501E+00 + -0.3667556737941666E+00 + -0.3665371224418439E+00 + -0.3663185426818702E+00 + -0.3660999348444060E+00 + -0.3658812992872661E+00 + -0.3656626364343768E+00 + -0.3654439467195933E+00 + -0.3652252305628773E+00 + -0.3650064883473223E+00 + -0.3647877204502715E+00 + -0.3645689272628672E+00 + -0.3643501092153310E+00 + -0.3641312667450559E+00 + -0.3639124002659165E+00 + -0.3636935101174912E+00 + -0.3634745966250128E+00 + -0.3632556601379869E+00 + -0.3630367010887174E+00 + -0.3628177199274792E+00 + -0.3625987170842426E+00 + -0.3623796929118260E+00 + -0.3621606477450743E+00 + -0.3619415819306968E+00 + -0.3617224958636731E+00 + -0.3615033899516118E+00 + -0.3612842645968120E+00 + -0.3610651201766600E+00 + -0.3608459570616706E+00 + -0.3606267756242023E+00 + -0.3604075762448402E+00 + -0.3601883593068815E+00 + -0.3599691251926013E+00 + -0.3597498742776401E+00 + -0.3595306069355455E+00 + -0.3593113235360194E+00 + -0.3590920244246213E+00 + -0.3588727099381001E+00 + -0.3586533804224909E+00 + -0.3584340362838804E+00 + -0.3582146779527966E+00 + -0.3579953058484712E+00 + -0.3577759203060206E+00 + -0.3575565216235691E+00 + -0.3573371101072980E+00 + -0.3571176861279732E+00 + -0.3568982500875157E+00 + -0.3566788023828802E+00 + -0.3564593433632786E+00 + -0.3562398733530575E+00 + -0.3560203926811707E+00 + -0.3558009017223354E+00 + -0.3555814008773872E+00 + -0.3553618905428238E+00 + -0.3551423710618733E+00 + -0.3549228427449424E+00 + -0.3547033059062482E+00 + -0.3544837609105453E+00 + -0.3542642081565437E+00 + -0.3540446480386774E+00 + -0.3538250808809652E+00 + -0.3536055069562699E+00 + -0.3533859265417668E+00 + -0.3531663399970777E+00 + -0.3529467477468770E+00 + -0.3527271502134421E+00 + -0.3525075477416930E+00 + -0.3522879406104802E+00 + -0.3520683290993980E+00 + -0.3518487135426194E+00 + -0.3516290943248604E+00 + -0.3514094718312254E+00 + -0.3511898464068643E+00 + -0.3509702183568554E+00 + -0.3507505879850976E+00 + -0.3505309556063794E+00 + -0.3503113215473050E+00 + -0.3500916861360731E+00 + -0.3498720497267775E+00 + -0.3496524127039568E+00 + -0.3494327754527464E+00 + -0.3492131383074473E+00 + -0.3489935015374519E+00 + -0.3487738654088716E+00 + -0.3485542302237006E+00 + -0.3483345963335016E+00 + -0.3481149640934380E+00 + -0.3478953338464738E+00 + -0.3476757059171631E+00 + -0.3474560806285839E+00 + -0.3472364582945567E+00 + -0.3470168392137102E+00 + -0.3467972236837022E+00 + -0.3465776120261410E+00 + -0.3463580046048651E+00 + -0.3461384017879043E+00 + -0.3459188039056163E+00 + -0.3456992112157126E+00 + -0.3454796239680315E+00 + -0.3452600424526968E+00 + -0.3450404670439883E+00 + -0.3448208981267815E+00 + -0.3446013360449796E+00 + -0.3443817810487777E+00 + -0.3441622333755699E+00 + -0.3439426932933642E+00 + -0.3437231611461120E+00 + -0.3435036372895262E+00 + -0.3432841220673097E+00 + -0.3430646157901850E+00 + -0.3428451187634682E+00 + -0.3426256312815066E+00 + -0.3424061536057459E+00 + -0.3421866859916732E+00 + -0.3419672287185601E+00 + -0.3417477821426466E+00 + -0.3415283466359529E+00 + -0.3413089225443624E+00 + -0.3410895101201578E+00 + -0.3408701095948994E+00 + -0.3406507212185150E+00 + -0.3404313453122512E+00 + -0.3402119822148959E+00 + -0.3399926322527782E+00 + -0.3397732956982927E+00 + -0.3395539728095134E+00 + -0.3393346638561945E+00 + -0.3391153691623748E+00 + -0.3388960890681367E+00 + -0.3386768238998870E+00 + -0.3384575739128039E+00 + -0.3382383393392932E+00 + -0.3380191204208684E+00 + -0.3377999174500302E+00 + -0.3375807307372905E+00 + -0.3373615605936312E+00 + -0.3371424073319243E+00 + -0.3369232712658755E+00 + -0.3367041527011162E+00 + -0.3364850518869983E+00 + -0.3362659690493790E+00 + -0.3360469044205663E+00 + -0.3358278582813961E+00 + -0.3356088309349463E+00 + -0.3353898226835368E+00 + -0.3351708338209898E+00 + -0.3349518646369820E+00 + -0.3347329154199513E+00 + -0.3345139864458556E+00 + -0.3342950779839730E+00 + -0.3340761903013809E+00 + -0.3338573236419122E+00 + -0.3336384782357870E+00 + -0.3334196543187362E+00 + -0.3332008521903638E+00 + -0.3329820721911090E+00 + -0.3327633146566491E+00 + -0.3325445798509171E+00 + -0.3323258679881935E+00 + -0.3321071792840975E+00 + -0.3318885139864962E+00 + -0.3316698723675126E+00 + -0.3314512547009590E+00 + -0.3312326612763731E+00 + -0.3310140923961305E+00 + -0.3307955483601550E+00 + -0.3305770294132349E+00 + -0.3303585357515179E+00 + -0.3301400675725783E+00 + -0.3299216251378161E+00 + -0.3297032087696568E+00 + -0.3294848187905225E+00 + -0.3292664554589308E+00 + -0.3290481189672109E+00 + -0.3288298095069099E+00 + -0.3286115273322707E+00 + -0.3283932727678644E+00 + -0.3281750461403253E+00 + -0.3279568477147550E+00 + -0.3277386776814139E+00 + -0.3275205362270371E+00 + -0.3273024235748890E+00 + -0.3270843399963397E+00 + -0.3268662857661412E+00 + -0.3266482611574882E+00 + -0.3264302664412880E+00 + -0.3262123018879626E+00 + -0.3259943677416699E+00 + -0.3257764642057727E+00 + -0.3255585914805923E+00 + -0.3253407497953515E+00 + -0.3251229394278543E+00 + -0.3249051606605303E+00 + -0.3246874137592807E+00 + -0.3244696989596520E+00 + -0.3242520164940129E+00 + -0.3240343665891896E+00 + -0.3238167494608671E+00 + -0.3235991653235892E+00 + -0.3233816144078108E+00 + -0.3231640969783261E+00 + -0.3229466133044798E+00 + -0.3227291636391048E+00 + -0.3225117481958680E+00 + -0.3222943671829018E+00 + -0.3220770208218772E+00 + -0.3218597093691861E+00 + -0.3216424330868312E+00 + -0.3214251922240290E+00 + -0.3212079869937643E+00 + -0.3209908176027797E+00 + -0.3207736842644061E+00 + -0.3205565872120601E+00 + -0.3203395266831037E+00 + -0.3201225029130288E+00 + -0.3199055161307433E+00 + -0.3196885665638579E+00 + -0.3194716544394026E+00 + -0.3192547799819683E+00 + -0.3190379434156656E+00 + -0.3188211449643231E+00 + -0.3186043848502993E+00 + -0.3183876632956608E+00 + -0.3181709805224889E+00 + -0.3179543367525674E+00 + -0.3177377322076734E+00 + -0.3175211671093950E+00 + -0.3173046416779952E+00 + -0.3170881561334053E+00 + -0.3168717106950875E+00 + -0.3166553055795382E+00 + -0.3164389410023367E+00 + -0.3162226171791542E+00 + -0.3160063343257236E+00 + -0.3157900926578622E+00 + -0.3155738923912848E+00 + -0.3153577337404869E+00 + -0.3151416169195398E+00 + -0.3149255421421068E+00 + -0.3147095096183483E+00 + -0.3144935195569613E+00 + -0.3142775721670374E+00 + -0.3140616676601612E+00 + -0.3138458062491463E+00 + -0.3136299881462280E+00 + -0.3134142135578048E+00 + -0.3131984826873179E+00 + -0.3129827957387121E+00 + -0.3127671529202369E+00 + -0.3125515544425923E+00 + -0.3123360005159752E+00 + -0.3121204913439761E+00 + -0.3119050271262065E+00 + -0.3116896080624927E+00 + -0.3114742343549570E+00 + -0.3112589062072654E+00 + -0.3110436238230352E+00 + -0.3108283874037447E+00 + -0.3106131971493686E+00 + -0.3103980532598718E+00 + -0.3101829559343643E+00 + -0.3099679053713101E+00 + -0.3097529017691536E+00 + -0.3095379453249035E+00 + -0.3093230362343769E+00 + -0.3091081746934228E+00 + -0.3088933608977140E+00 + -0.3086785950427698E+00 + -0.3084638773241426E+00 + -0.3082492079365134E+00 + -0.3080345870737020E+00 + -0.3078200149294732E+00 + -0.3076054916951032E+00 + -0.3073910175592039E+00 + -0.3071765927103776E+00 + -0.3069622173387123E+00 + -0.3067478916360022E+00 + -0.3065336157941314E+00 + -0.3063193900020496E+00 + -0.3061052144450037E+00 + -0.3058910893081170E+00 + -0.3056770147783134E+00 + -0.3054629910449400E+00 + -0.3052490182975187E+00 + -0.3050350967218320E+00 + -0.3048212264981018E+00 + -0.3046074078062131E+00 + -0.3043936408288637E+00 + -0.3041799257532158E+00 + -0.3039662627668486E+00 + -0.3037526520528912E+00 + -0.3035390937866667E+00 + -0.3033255881428101E+00 + -0.3031121352993363E+00 + -0.3028987354405943E+00 + -0.3026853887516769E+00 + -0.3024720954135701E+00 + -0.3022588555987256E+00 + -0.3020456694786168E+00 + -0.3018325372276083E+00 + -0.3016194590264615E+00 + -0.3014064350568630E+00 + -0.3011934654973869E+00 + -0.3009805505188956E+00 + -0.3007676902911524E+00 + -0.3005548849847965E+00 + -0.3003421347726942E+00 + -0.3001294398281356E+00 + -0.2999168003242166E+00 + -0.2997042164333343E+00 + -0.2994916883278136E+00 + -0.2992792161788619E+00 + -0.2990668001539758E+00 + -0.2988544404199627E+00 + -0.2986421371442387E+00 + -0.2984298904961830E+00 + -0.2982177006456551E+00 + -0.2980055677615843E+00 + -0.2977934920091457E+00 + -0.2975814735526629E+00 + -0.2973695125563402E+00 + -0.2971576091836830E+00 + -0.2969457635980603E+00 + -0.2967339759633643E+00 + -0.2965222464456881E+00 + -0.2963105752118015E+00 + -0.2960989624270021E+00 + -0.2958874082488883E+00 + -0.2956759128326686E+00 + -0.2954644763345973E+00 + -0.2952530989164837E+00 + -0.2950417807420942E+00 + -0.2948305219744409E+00 + -0.2946193227716256E+00 + -0.2944081832899308E+00 + -0.2941971036857888E+00 + -0.2939860841163428E+00 + -0.2937751247390615E+00 + -0.2935642257111711E+00 + -0.2933533871877394E+00 + -0.2931426093228959E+00 + -0.2929318922707322E+00 + -0.2927212361846737E+00 + -0.2925106412178478E+00 + -0.2923001075235030E+00 + -0.2920896352555864E+00 + -0.2918792245684395E+00 + -0.2916688756158600E+00 + -0.2914585885456515E+00 + -0.2912483635021743E+00 + -0.2910382006303751E+00 + -0.2908281000817843E+00 + -0.2906180620120855E+00 + -0.2904080865764672E+00 + -0.2901981739224741E+00 + -0.2899883241924570E+00 + -0.2897785375290151E+00 + -0.2895688140790614E+00 + -0.2893591539927129E+00 + -0.2891495574198619E+00 + -0.2889400245049160E+00 + -0.2887305553878936E+00 + -0.2885211502088895E+00 + -0.2883118091108671E+00 + -0.2881025322392907E+00 + -0.2878933197396434E+00 + -0.2876841717552296E+00 + -0.2874750884273031E+00 + -0.2872660698970479E+00 + -0.2870571163048752E+00 + -0.2868482277904078E+00 + -0.2866394044932277E+00 + -0.2864306465516576E+00 + -0.2862219541026267E+00 + -0.2860133272831112E+00 + -0.2858047662327542E+00 + -0.2855962710943814E+00 + -0.2853878420108957E+00 + -0.2851794791193742E+00 + -0.2849711825493270E+00 + -0.2847629524298576E+00 + -0.2845547888931525E+00 + -0.2843466920757196E+00 + -0.2841386621144134E+00 + -0.2839306991452104E+00 + -0.2837228033027270E+00 + -0.2835149747214764E+00 + -0.2833072135342203E+00 + -0.2830995198707933E+00 + -0.2828918938607927E+00 + -0.2826843356342683E+00 + -0.2824768453220582E+00 + -0.2822694230551144E+00 + -0.2820620689644426E+00 + -0.2818547831811192E+00 + -0.2816475658362472E+00 + -0.2814404170584328E+00 + -0.2812333369709259E+00 + -0.2810263256963226E+00 + -0.2808193833588510E+00 + -0.2806125100864803E+00 + -0.2804057060077400E+00 + -0.2801989712510878E+00 + -0.2799923059447494E+00 + -0.2797857102169394E+00 + -0.2795791841932291E+00 + -0.2793727279918181E+00 + -0.2791663417296656E+00 + -0.2789600255259371E+00 + -0.2787537795064127E+00 + -0.2785476037981465E+00 + -0.2783414985267901E+00 + -0.2781354638132836E+00 + -0.2779294997776153E+00 + -0.2777236065392724E+00 + -0.2775177842158424E+00 + -0.2773120329245035E+00 + -0.2771063527831976E+00 + -0.2769007439128202E+00 + -0.2766952064350230E+00 + -0.2764897404703449E+00 + -0.2762843461343675E+00 + -0.2760790235413427E+00 + -0.2758737728061004E+00 + -0.2756685940461483E+00 + -0.2754634873798134E+00 + -0.2752584529243803E+00 + -0.2750534907915541E+00 + -0.2748486010912303E+00 + -0.2746437839342854E+00 + -0.2744390394371444E+00 + -0.2742343677182358E+00 + -0.2740297688949007E+00 + -0.2738252430774307E+00 + -0.2736207903733749E+00 + -0.2734164108908981E+00 + -0.2732121047423816E+00 + -0.2730078720420188E+00 + -0.2728037129033667E+00 + -0.2725996274348709E+00 + -0.2723956157426138E+00 + -0.2721916779330156E+00 + -0.2719878141153340E+00 + -0.2717840244002733E+00 + -0.2715803088983834E+00 + -0.2713766677184726E+00 + -0.2711731009683984E+00 + -0.2709696087556208E+00 + -0.2707661911833343E+00 + -0.2705628483521906E+00 + -0.2703595803633329E+00 + -0.2701563873239031E+00 + -0.2699532693449443E+00 + -0.2697502265370429E+00 + -0.2695472590036681E+00 + -0.2693443668432809E+00 + -0.2691415501544245E+00 + -0.2689388090381887E+00 + -0.2687361435976142E+00 + -0.2685335539358475E+00 + -0.2683310401567284E+00 + -0.2681286023646723E+00 + -0.2679262406638681E+00 + -0.2677239551535419E+00 + -0.2675217459284731E+00 + -0.2673196130834981E+00 + -0.2671175567179482E+00 + -0.2669155769355213E+00 + -0.2667136738398806E+00 + -0.2665118475288505E+00 + -0.2663100980941067E+00 + -0.2661084256272249E+00 + -0.2659068302251471E+00 + -0.2657053119909385E+00 + -0.2655038710278453E+00 + -0.2653025074332987E+00 + -0.2651012212975371E+00 + -0.2649000127104241E+00 + -0.2646988817644255E+00 + -0.2644978285554913E+00 + -0.2642968531797911E+00 + -0.2640959557317339E+00 + -0.2638951363031659E+00 + -0.2636943949857691E+00 + -0.2634937318729564E+00 + -0.2632931470608659E+00 + -0.2630926406458245E+00 + -0.2628922127192497E+00 + -0.2626918633641426E+00 + -0.2624915926627319E+00 + -0.2622914007024329E+00 + -0.2620912875803077E+00 + -0.2618912533944529E+00 + -0.2616912982389705E+00 + -0.2614914221998672E+00 + -0.2612916253621758E+00 + -0.2610919078109917E+00 + -0.2608922696315419E+00 + -0.2606927109090804E+00 + -0.2604932317302091E+00 + -0.2602938321847632E+00 + -0.2600945123630581E+00 + -0.2598952723539726E+00 + -0.2596961122426058E+00 + -0.2594970321134470E+00 + -0.2592980320501896E+00 + -0.2590991121342338E+00 + -0.2589002724465733E+00 + -0.2587015130693242E+00 + -0.2585028340881129E+00 + -0.2583042355892587E+00 + -0.2581057176584708E+00 + -0.2579072803793603E+00 + -0.2577089238350911E+00 + -0.2575106481075504E+00 + -0.2573124532738126E+00 + -0.2571143394098188E+00 + -0.2569163065931577E+00 + -0.2567183549082165E+00 + -0.2565204844411391E+00 + -0.2563226952763593E+00 + -0.2561249874905529E+00 + -0.2559273611582015E+00 + -0.2557298163547545E+00 + -0.2555323531604728E+00 + -0.2553349716571101E+00 + -0.2551376719252025E+00 + -0.2549404540386455E+00 + -0.2547433180690802E+00 + -0.2545462640893668E+00 + -0.2543492921796808E+00 + -0.2541524024229127E+00 + -0.2539555949006942E+00 + -0.2537588696863243E+00 + -0.2535622268497266E+00 + -0.2533656664611654E+00 + -0.2531691885934839E+00 + -0.2529727933206593E+00 + -0.2527764807169818E+00 + -0.2525802508592174E+00 + -0.2523841038253248E+00 + -0.2521880396923955E+00 + -0.2519920585297688E+00 + -0.2517961604027236E+00 + -0.2516003453771163E+00 + -0.2514046135249007E+00 + -0.2512089649214987E+00 + -0.2510133996420399E+00 + -0.2508179177580236E+00 + -0.2506225193387048E+00 + -0.2504272044533003E+00 + -0.2502319731710328E+00 + -0.2500368255611268E+00 + -0.2498417616927538E+00 + -0.2496467816344310E+00 + -0.2494518854541972E+00 + -0.2492570732199845E+00 + -0.2490623449983054E+00 + -0.2488677008545525E+00 + -0.2486731408542098E+00 + -0.2484786650650349E+00 + -0.2482842735567264E+00 + -0.2480899663988510E+00 + -0.2478957436571440E+00 + -0.2477016053937921E+00 + -0.2475075516709269E+00 + -0.2473135825527184E+00 + -0.2471196981053824E+00 + -0.2469258983951810E+00 + -0.2467321834874189E+00 + -0.2465385534463592E+00 + -0.2463450083361594E+00 + -0.2461515482194896E+00 + -0.2459581731572742E+00 + -0.2457648832103351E+00 + -0.2455716784398145E+00 + -0.2453785589072633E+00 + -0.2451855246742523E+00 + -0.2449925758024279E+00 + -0.2447997123535466E+00 + -0.2446069343893517E+00 + -0.2444142419709496E+00 + -0.2442216351584988E+00 + -0.2440291140120623E+00 + -0.2438366785913439E+00 + -0.2436443289554652E+00 + -0.2434520651634784E+00 + -0.2432598872738082E+00 + -0.2430677953437816E+00 + -0.2428757894306028E+00 + -0.2426838695917408E+00 + -0.2424920358851819E+00 + -0.2423002883689578E+00 + -0.2421086271005928E+00 + -0.2419170521365657E+00 + -0.2417255635332086E+00 + -0.2415341613463923E+00 + -0.2413428456309512E+00 + -0.2411516164415644E+00 + -0.2409604738330842E+00 + -0.2407694178608161E+00 + -0.2405784485801228E+00 + -0.2403875660460423E+00 + -0.2401967703127556E+00 + -0.2400060614342862E+00 + -0.2398154394639916E+00 + -0.2396249044532763E+00 + -0.2394344564531705E+00 + -0.2392440955158456E+00 + -0.2390538216972209E+00 + -0.2388636350539655E+00 + -0.2386735356404202E+00 + -0.2384835235026710E+00 + -0.2382935986849502E+00 + -0.2381037612338985E+00 + -0.2379140112056237E+00 + -0.2377243486585351E+00 + -0.2375347736487154E+00 + -0.2373452862223216E+00 + -0.2371558864228394E+00 + -0.2369665742948912E+00 + -0.2367773498885147E+00 + -0.2365882132553249E+00 + -0.2363991644465327E+00 + -0.2362102035113353E+00 + -0.2360213304982715E+00 + -0.2358325454554541E+00 + -0.2356438484286795E+00 + -0.2354552394629171E+00 + -0.2352667186033464E+00 + -0.2350782858965649E+00 + -0.2348899413897040E+00 + -0.2347016851300687E+00 + -0.2345135171662550E+00 + -0.2343254375473892E+00 + -0.2341374463217127E+00 + -0.2339495435308919E+00 + -0.2337617292135751E+00 + -0.2335740034091063E+00 + -0.2333863661629373E+00 + -0.2331988175235517E+00 + -0.2330113575389786E+00 + -0.2328239862530050E+00 + -0.2326367037071107E+00 + -0.2324495099429111E+00 + -0.2322624050038425E+00 + -0.2320753889344043E+00 + -0.2318884617788133E+00 + -0.2317016235780997E+00 + -0.2315148743712503E+00 + -0.2313282141973678E+00 + -0.2311416430977463E+00 + -0.2309551611151907E+00 + -0.2307687682924081E+00 + -0.2305824646705316E+00 + -0.2303962502895082E+00 + -0.2302101251892318E+00 + -0.2300240894095712E+00 + -0.2298381429903691E+00 + -0.2296522859713198E+00 + -0.2294665183897580E+00 + -0.2292808402809323E+00 + -0.2290952516802468E+00 + -0.2289097526284261E+00 + -0.2287243431712852E+00 + -0.2285390233545041E+00 + -0.2283537932159012E+00 + -0.2281686527851493E+00 + -0.2279836020916866E+00 + -0.2277986411698245E+00 + -0.2276137700593485E+00 + -0.2274289888002580E+00 + -0.2272442974306462E+00 + -0.2270596959862949E+00 + -0.2268751845028137E+00 + -0.2266907630154151E+00 + -0.2265064315587966E+00 + -0.2263221901676001E+00 + -0.2261380388766325E+00 + -0.2259539777209469E+00 + -0.2257700067355854E+00 + -0.2255861259551736E+00 + -0.2254023354137086E+00 + -0.2252186351450903E+00 + -0.2250350251818711E+00 + -0.2248515055543503E+00 + -0.2246680762926149E+00 + -0.2244847374295782E+00 + -0.2243014890033525E+00 + -0.2241183310525461E+00 + -0.2239352636108269E+00 + -0.2237522867020466E+00 + -0.2235694003488939E+00 + -0.2233866045790640E+00 + -0.2232038994311449E+00 + -0.2230212849451129E+00 + -0.2228387611565426E+00 + -0.2226563280906407E+00 + -0.2224739857710935E+00 + -0.2222917342240483E+00 + -0.2221095734820441E+00 + -0.2219275035786122E+00 + -0.2217455245452822E+00 + -0.2215636364079997E+00 + -0.2213818391917083E+00 + -0.2212001329232549E+00 + -0.2210185176354124E+00 + -0.2208369933620691E+00 + -0.2206555601346097E+00 + -0.2204742179760344E+00 + -0.2202929669075505E+00 + -0.2201118069523560E+00 + -0.2199307381411024E+00 + -0.2197497605061417E+00 + -0.2195688740781898E+00 + -0.2193880788814208E+00 + -0.2192073749383261E+00 + -0.2190267622721509E+00 + -0.2188462409095981E+00 + -0.2186658108783091E+00 + -0.2184854722053969E+00 + -0.2183052249155101E+00 + -0.2181250690325268E+00 + -0.2179450045805258E+00 + -0.2177650315848042E+00 + -0.2175851500710425E+00 + -0.2174053600644556E+00 + -0.2172256615876695E+00 + -0.2170460546623472E+00 + -0.2168665393107391E+00 + -0.2166871155590892E+00 + -0.2165077834352124E+00 + -0.2163285429656907E+00 + -0.2161493941684781E+00 + -0.2159703370577638E+00 + -0.2157913716490911E+00 + -0.2156124979690274E+00 + -0.2154337160493359E+00 + -0.2152550259204075E+00 + -0.2150764276006282E+00 + -0.2148979211021901E+00 + -0.2147195064381357E+00 + -0.2145411836305480E+00 + -0.2143629527065556E+00 + -0.2141848136927246E+00 + -0.2140067666092824E+00 + -0.2138288114725882E+00 + -0.2136509482991624E+00 + -0.2134731771084915E+00 + -0.2132954979220099E+00 + -0.2131179107610413E+00 + -0.2129404156453686E+00 + -0.2127630125936600E+00 + -0.2125857016244566E+00 + -0.2124084827552129E+00 + -0.2122313560025343E+00 + -0.2120543213830574E+00 + -0.2118773789149266E+00 + -0.2117005286175487E+00 + -0.2115237705102770E+00 + -0.2113471046112550E+00 + -0.2111705309375195E+00 + -0.2109940495060079E+00 + -0.2108176603330533E+00 + -0.2106413634343925E+00 + -0.2104651588256923E+00 + -0.2102890465223363E+00 + -0.2101130265394057E+00 + -0.2099370988919808E+00 + -0.2097612635965753E+00 + -0.2095855206713726E+00 + -0.2094098701345552E+00 + -0.2092343120020943E+00 + -0.2090588462871917E+00 + -0.2088834730028577E+00 + -0.2087081921628907E+00 + -0.2085330037821769E+00 + -0.2083579078756242E+00 + -0.2081829044569331E+00 + -0.2080079935380375E+00 + -0.2078331751307077E+00 + -0.2076584492476117E+00 + -0.2074838159028795E+00 + -0.2073092751107406E+00 + -0.2071348268855011E+00 + -0.2069604712416301E+00 + -0.2067862081935690E+00 + -0.2066120377544591E+00 + -0.2064379599350156E+00 + -0.2062639747456497E+00 + -0.2060900821967748E+00 + -0.2059162822988509E+00 + -0.2057425750623142E+00 + -0.2055689604985119E+00 + -0.2053954386208863E+00 + -0.2052220094431271E+00 + -0.2050486729773082E+00 + -0.2048754292316022E+00 + -0.2047022782135637E+00 + -0.2045292199320370E+00 + -0.2043562543993764E+00 + -0.2041833816284846E+00 + -0.2040106016303782E+00 + -0.2038379144106466E+00 + -0.2036653199738594E+00 + -0.2034928183270548E+00 + -0.2033204094852456E+00 + -0.2031480934650051E+00 + -0.2029758702795738E+00 + -0.2028037399306156E+00 + -0.2026317024172285E+00 + -0.2024597577417828E+00 + -0.2022879059193325E+00 + -0.2021161469679444E+00 + -0.2019444809023580E+00 + -0.2017729077234328E+00 + -0.2016014274283467E+00 + -0.2014300400168376E+00 + -0.2012587455006223E+00 + -0.2010875438948412E+00 + -0.2009164352128610E+00 + -0.2007454194592111E+00 + -0.2005744966356046E+00 + -0.2004036667442431E+00 + -0.2002329297902506E+00 + -0.2000622857797317E+00 + -0.1998917347190585E+00 + -0.1997212766164403E+00 + -0.1995509114807549E+00 + -0.1993806393200377E+00 + -0.1992104601368802E+00 + -0.1990403739316066E+00 + -0.1988703807051588E+00 + -0.1987004804633872E+00 + -0.1985306732143245E+00 + -0.1983609589653972E+00 + -0.1981913377192625E+00 + -0.1980218094762221E+00 + -0.1978523742370088E+00 + -0.1976830320067615E+00 + -0.1975137827929460E+00 + -0.1973446266026369E+00 + -0.1971755634391137E+00 + -0.1970065933034419E+00 + -0.1968377161967507E+00 + -0.1966689321216349E+00 + -0.1965002410815939E+00 + -0.1963316430799167E+00 + -0.1961631381175420E+00 + -0.1959947261937926E+00 + -0.1958264073081523E+00 + -0.1956581814633880E+00 + -0.1954900486646836E+00 + -0.1953220089170789E+00 + -0.1951540622230086E+00 + -0.1949862085828117E+00 + -0.1948184479966642E+00 + -0.1946507804636050E+00 + -0.1944832059816786E+00 + -0.1943157245489876E+00 + -0.1941483361663955E+00 + -0.1939810408373614E+00 + -0.1938138385653034E+00 + -0.1936467293511356E+00 + -0.1934797131932220E+00 + -0.1933127900897621E+00 + -0.1931459600387451E+00 + -0.1929792230379302E+00 + -0.1928125790851113E+00 + -0.1926460281809337E+00 + -0.1924795703294657E+00 + -0.1923132055348225E+00 + -0.1921469337965848E+00 + -0.1919807551084611E+00 + -0.1918146694637732E+00 + -0.1916486768580713E+00 + -0.1914827772900603E+00 + -0.1913169707586621E+00 + -0.1911512572639591E+00 + -0.1909856368078260E+00 + -0.1908201093921964E+00 + -0.1906546750151025E+00 + -0.1904893336681373E+00 + -0.1903240853422785E+00 + -0.1901589300316214E+00 + -0.1899938677359156E+00 + -0.1898288984554525E+00 + -0.1896640221892686E+00 + -0.1894992389339836E+00 + -0.1893345486858948E+00 + -0.1891699514407371E+00 + -0.1890054471930996E+00 + -0.1888410359373878E+00 + -0.1886767176688287E+00 + -0.1885124923846203E+00 + -0.1883483600821994E+00 + -0.1881843207581468E+00 + -0.1880203744069426E+00 + -0.1878565210227005E+00 + -0.1876927605999206E+00 + -0.1875290931342544E+00 + -0.1873655186215124E+00 + -0.1872020370565557E+00 + -0.1870386484314660E+00 + -0.1868753527377630E+00 + -0.1867121499683236E+00 + -0.1865490401206328E+00 + -0.1863860231930932E+00 + -0.1862230991825211E+00 + -0.1860602680800816E+00 + -0.1858975298756215E+00 + -0.1857348845595023E+00 + -0.1855723321242835E+00 + -0.1854098725630354E+00 + -0.1852475058691969E+00 + -0.1850852320379733E+00 + -0.1849230510650187E+00 + -0.1847609629450422E+00 + -0.1845989676684048E+00 + -0.1844370652241332E+00 + -0.1842752556021708E+00 + -0.1841135387974744E+00 + -0.1839519148066126E+00 + -0.1837903836251263E+00 + -0.1836289452428327E+00 + -0.1834675996474695E+00 + -0.1833063468271042E+00 + -0.1831451867721802E+00 + -0.1829841194740396E+00 + -0.1828231449241133E+00 + -0.1826622631147150E+00 + -0.1825014740385107E+00 + -0.1823407776879719E+00 + -0.1821801740543839E+00 + -0.1820196631284540E+00 + -0.1818592449006978E+00 + -0.1816989193603724E+00 + -0.1815386864960741E+00 + -0.1813785462964675E+00 + -0.1812184987513156E+00 + -0.1810585438509654E+00 + -0.1808986815858425E+00 + -0.1807389119475858E+00 + -0.1805792349285402E+00 + -0.1804196505205023E+00 + -0.1802601587092143E+00 + -0.1801007594764691E+00 + -0.1799414528046350E+00 + -0.1797822386851567E+00 + -0.1796231171158616E+00 + -0.1794640880940842E+00 + -0.1793051516084639E+00 + -0.1791463076409837E+00 + -0.1789875561736755E+00 + -0.1788288971930091E+00 + -0.1786703306891220E+00 + -0.1785118566521449E+00 + -0.1783534750708008E+00 + -0.1781951859325448E+00 + -0.1780369892247875E+00 + -0.1778788849359577E+00 + -0.1777208730554708E+00 + -0.1775629535726267E+00 + -0.1774051264738393E+00 + -0.1772473917424883E+00 + -0.1770897493618574E+00 + -0.1769321993180689E+00 + -0.1767747416004895E+00 + -0.1766173761985681E+00 + -0.1764601030999553E+00 + -0.1763029222900880E+00 + -0.1761458337542404E+00 + -0.1759888374784925E+00 + -0.1758319334500238E+00 + -0.1756751216560115E+00 + -0.1755184020819164E+00 + -0.1753617747107242E+00 + -0.1752052395252224E+00 + -0.1750487965108284E+00 + -0.1748924456571387E+00 + -0.1747361869540350E+00 + -0.1745800203881414E+00 + -0.1744239459405326E+00 + -0.1742679635917114E+00 + -0.1741120733241749E+00 + -0.1739562751241805E+00 + -0.1738005689783511E+00 + -0.1736449548732111E+00 + -0.1734894327951337E+00 + -0.1733340027304241E+00 + -0.1731786646637302E+00 + -0.1730234185761040E+00 + -0.1728682644480793E+00 + -0.1727132022619954E+00 + -0.1725582320046103E+00 + -0.1724033536632879E+00 + -0.1722485672237161E+00 + -0.1720938726672586E+00 + -0.1719392699745360E+00 + -0.1717847591269555E+00 + -0.1716303401082772E+00 + -0.1714760129026395E+00 + -0.1713217774940867E+00 + -0.1711676338664758E+00 + -0.1710135820035873E+00 + -0.1708596218886037E+00 + -0.1707057535027736E+00 + -0.1705519768268901E+00 + -0.1703982918423468E+00 + -0.1702446985329354E+00 + -0.1700911968829757E+00 + -0.1699377868760932E+00 + -0.1697844684932036E+00 + -0.1696312417144848E+00 + -0.1694781065207098E+00 + -0.1693250628955302E+00 + -0.1691721108233751E+00 + -0.1690192502878612E+00 + -0.1688664812687623E+00 + -0.1687138037446254E+00 + -0.1685612176942749E+00 + -0.1684087230982849E+00 + -0.1682563199377899E+00 + -0.1681040081941632E+00 + -0.1679517878504547E+00 + -0.1677996588903051E+00 + -0.1676476212967738E+00 + -0.1674956750493548E+00 + -0.1673438201260669E+00 + -0.1671920565051729E+00 + -0.1670403841670604E+00 + -0.1668888030930294E+00 + -0.1667373132643026E+00 + -0.1665859146618115E+00 + -0.1664346072663207E+00 + -0.1662833910584140E+00 + -0.1661322660174709E+00 + -0.1659812321222157E+00 + -0.1658302893513195E+00 + -0.1656794376834261E+00 + -0.1655286770971440E+00 + -0.1653780075711208E+00 + -0.1652274290849531E+00 + -0.1650769416188040E+00 + -0.1649265451528418E+00 + -0.1647762396677538E+00 + -0.1646260251445605E+00 + -0.1644759015640089E+00 + -0.1643258689036339E+00 + -0.1641759271386173E+00 + -0.1640260762442459E+00 + -0.1638763161990163E+00 + -0.1637266469839479E+00 + -0.1635770685799967E+00 + -0.1634275809665953E+00 + -0.1632781841218654E+00 + -0.1631288780237722E+00 + -0.1629796626489229E+00 + -0.1628305379726624E+00 + -0.1626815039703488E+00 + -0.1625325606198844E+00 + -0.1623837079017273E+00 + -0.1622349457963440E+00 + -0.1620862742826807E+00 + -0.1619376933380346E+00 + -0.1617892029395631E+00 + -0.1616408030641248E+00 + -0.1614924936882355E+00 + -0.1613442747883140E+00 + -0.1611961463396815E+00 + -0.1610481083162709E+00 + -0.1609001606919682E+00 + -0.1607523034448133E+00 + -0.1606045365586203E+00 + -0.1604568600174741E+00 + -0.1603092737994169E+00 + -0.1601617778734365E+00 + -0.1600143722077918E+00 + -0.1598670567753488E+00 + -0.1597198315565233E+00 + -0.1595726965323638E+00 + -0.1594256516823775E+00 + -0.1592786969833767E+00 + -0.1591318324118426E+00 + -0.1589850579431553E+00 + -0.1588383735506216E+00 + -0.1586917792072685E+00 + -0.1585452748865807E+00 + -0.1583988605630617E+00 + -0.1582525362113014E+00 + -0.1581063018070608E+00 + -0.1579601573288387E+00 + -0.1578141027554705E+00 + -0.1576681380648653E+00 + -0.1575222632327061E+00 + -0.1573764782342873E+00 + -0.1572307830432187E+00 + -0.1570851776286124E+00 + -0.1569396619587794E+00 + -0.1567942360052331E+00 + -0.1566488997491169E+00 + -0.1565036531733165E+00 + -0.1563584962581947E+00 + -0.1562134289760129E+00 + -0.1560684512973441E+00 + -0.1559235631930686E+00 + -0.1557787646353026E+00 + -0.1556340555963966E+00 + -0.1554894360494008E+00 + -0.1553449059702539E+00 + -0.1552004653355618E+00 + -0.1550561141213223E+00 + -0.1549118523010885E+00 + -0.1547676798477215E+00 + -0.1546235967343041E+00 + -0.1544796029351592E+00 + -0.1543356984249363E+00 + -0.1541918831776965E+00 + -0.1540481571646824E+00 + -0.1539045203561939E+00 + -0.1537609727232641E+00 + -0.1536175142413322E+00 + -0.1534741448873543E+00 + -0.1533308646375060E+00 + -0.1531876734633530E+00 + -0.1530445713346566E+00 + -0.1529015582216164E+00 + -0.1527586340977811E+00 + -0.1526157989380721E+00 + -0.1524730527168458E+00 + -0.1523303954044826E+00 + -0.1521878269695158E+00 + -0.1520453473812742E+00 + -0.1519029566162081E+00 + -0.1517606546542894E+00 + -0.1516184414744094E+00 + -0.1514763170456230E+00 + -0.1513342813316316E+00 + -0.1511923342967740E+00 + -0.1510504759130023E+00 + -0.1509087061567305E+00 + -0.1507670250041991E+00 + -0.1506254324295233E+00 + -0.1504839284054403E+00 + -0.1503425129043253E+00 + -0.1502011858947930E+00 + -0.1500599473428337E+00 + -0.1499187972148570E+00 + -0.1497777354848288E+00 + -0.1496367621323863E+00 + -0.1494958771367042E+00 + -0.1493550804678581E+00 + -0.1492143720884938E+00 + -0.1490737519613838E+00 + -0.1489332200566263E+00 + -0.1487927763507884E+00 + -0.1486524208204110E+00 + -0.1485121534377316E+00 + -0.1483719741708644E+00 + -0.1482318829877852E+00 + -0.1480918798583482E+00 + -0.1479519647543575E+00 + -0.1478121376476629E+00 + -0.1476723985102103E+00 + -0.1475327473140605E+00 + -0.1473931840311626E+00 + -0.1472537086310746E+00 + -0.1471143210804555E+00 + -0.1469750213457910E+00 + -0.1468358093956653E+00 + -0.1466966852014474E+00 + -0.1465576487346535E+00 + -0.1464186999669893E+00 + -0.1462798388704556E+00 + -0.1461410654169798E+00 + -0.1460023795755810E+00 + -0.1458637813107913E+00 + -0.1457252705867696E+00 + -0.1455868473725530E+00 + -0.1454485116454379E+00 + -0.1453102633834178E+00 + -0.1451721025590402E+00 + -0.1450340291349209E+00 + -0.1448960430725885E+00 + -0.1447581443369176E+00 + -0.1446203328995035E+00 + -0.1444826087326878E+00 + -0.1443449718077889E+00 + -0.1442074220939664E+00 + -0.1440699595600536E+00 + -0.1439325841754870E+00 + -0.1437952959112001E+00 + -0.1436580947382965E+00 + -0.1435209806262313E+00 + -0.1433839535402937E+00 + -0.1432470134450652E+00 + -0.1431101603066590E+00 + -0.1429733940956017E+00 + -0.1428367147831493E+00 + -0.1427001223394872E+00 + -0.1425636167316016E+00 + -0.1424271979258216E+00 + -0.1422908658892356E+00 + -0.1421546205916259E+00 + -0.1420184620033011E+00 + -0.1418823900938575E+00 + -0.1417464048303940E+00 + -0.1416105061793915E+00 + -0.1414746941076763E+00 + -0.1413389685836421E+00 + -0.1412033295760400E+00 + -0.1410677770538802E+00 + -0.1409323109874993E+00 + -0.1407969313475669E+00 + -0.1406616381032435E+00 + -0.1405264312165302E+00 + -0.1403913106472088E+00 + -0.1402562763570270E+00 + -0.1401213283185107E+00 + -0.1399864665077453E+00 + -0.1398516908991644E+00 + -0.1397170014577076E+00 + -0.1395823981448206E+00 + -0.1394478809227810E+00 + -0.1393134497595906E+00 + -0.1391791046254974E+00 + -0.1390448454902483E+00 + -0.1389106723202805E+00 + -0.1387765850805640E+00 + -0.1386425837362808E+00 + -0.1385086682546911E+00 + -0.1383748386040123E+00 + -0.1382410947523876E+00 + -0.1381074366676691E+00 + -0.1379738643175327E+00 + -0.1378403776694861E+00 + -0.1377069766898762E+00 + -0.1375736613443757E+00 + -0.1374404315985786E+00 + -0.1373072874178192E+00 + -0.1371742287672539E+00 + -0.1370412556121385E+00 + -0.1369083679195344E+00 + -0.1367755656576768E+00 + -0.1366428487945845E+00 + -0.1365102172957135E+00 + -0.1363776711246675E+00 + -0.1362452102451956E+00 + -0.1361128346246002E+00 + -0.1359805442329356E+00 + -0.1358483390400958E+00 + -0.1357162190128005E+00 + -0.1355841841150862E+00 + -0.1354522343108809E+00 + -0.1353203695645643E+00 + -0.1351885898409262E+00 + -0.1350568951047619E+00 + -0.1349252853217660E+00 + -0.1347937604585196E+00 + -0.1346623204815789E+00 + -0.1345309653571106E+00 + -0.1343996950508679E+00 + -0.1342685095285474E+00 + -0.1341374087562119E+00 + -0.1340063927003590E+00 + -0.1338754613274250E+00 + -0.1337446146025027E+00 + -0.1336138524890081E+00 + -0.1334831749502294E+00 + -0.1333525819506443E+00 + -0.1332220734563711E+00 + -0.1330916494335895E+00 + -0.1329613098480078E+00 + -0.1328310546646596E+00 + -0.1327008838484840E+00 + -0.1325707973648418E+00 + -0.1324407951798046E+00 + -0.1323108772594433E+00 + -0.1321810435683594E+00 + -0.1320512940686316E+00 + -0.1319216287220583E+00 + -0.1317920474926624E+00 + -0.1316625503487310E+00 + -0.1315331372589660E+00 + -0.1314038081896631E+00 + -0.1312745631022104E+00 + -0.1311454019573533E+00 + -0.1310163247179743E+00 + -0.1308873313518209E+00 + -0.1307584218272549E+00 + -0.1306295961107793E+00 + -0.1305008541644188E+00 + -0.1303721959494809E+00 + -0.1302436214280449E+00 + -0.1301151305643443E+00 + -0.1299867233229258E+00 + -0.1298583996686276E+00 + -0.1297301595672411E+00 + -0.1296020029846886E+00 + -0.1294739298865723E+00 + -0.1293459402375790E+00 + -0.1292180340021723E+00 + -0.1290902111439005E+00 + -0.1289624716232416E+00 + -0.1288348153999585E+00 + -0.1287072424357130E+00 + -0.1285797526996089E+00 + -0.1284523461624985E+00 + -0.1283250227926922E+00 + -0.1281977825479604E+00 + -0.1280706253832596E+00 + -0.1279435512561928E+00 + -0.1278165601367823E+00 + -0.1276896519985976E+00 + -0.1275628268127934E+00 + -0.1274360845384859E+00 + -0.1273094251309517E+00 + -0.1271828485468927E+00 + -0.1270563547511994E+00 + -0.1269299437115579E+00 + -0.1268036153948209E+00 + -0.1266773697629840E+00 + -0.1265512067761774E+00 + -0.1264251263953119E+00 + -0.1262991285868857E+00 + -0.1261732133196705E+00 + -0.1260473805614343E+00 + -0.1259216302727607E+00 + -0.1257959624109735E+00 + -0.1256703769342101E+00 + -0.1255448738077905E+00 + -0.1254194530005258E+00 + -0.1252941144804909E+00 + -0.1251688582092557E+00 + -0.1250436841448994E+00 + -0.1249185922457717E+00 + -0.1247935824737644E+00 + -0.1246686547927989E+00 + -0.1245438091669219E+00 + -0.1244190455618341E+00 + -0.1242943639442569E+00 + -0.1241697642804504E+00 + -0.1240452465312324E+00 + -0.1239208106536907E+00 + -0.1237964566051943E+00 + -0.1236721843488032E+00 + -0.1235479938517770E+00 + -0.1234238850811734E+00 + -0.1232998579999749E+00 + -0.1231759125678829E+00 + -0.1230520487445485E+00 + -0.1229282664912700E+00 + -0.1228045657707701E+00 + -0.1226809465458327E+00 + -0.1225574087804775E+00 + -0.1224339524398876E+00 + -0.1223105774891348E+00 + -0.1221872838906426E+00 + -0.1220640716041319E+00 + -0.1219409405891959E+00 + -0.1218178908066057E+00 + -0.1216949222184403E+00 + -0.1215720347868374E+00 + -0.1214492284751688E+00 + -0.1213265032482978E+00 + -0.1212038590710611E+00 + -0.1210812959056582E+00 + -0.1209588137108780E+00 + -0.1208364124452779E+00 + -0.1207140920694842E+00 + -0.1205918525470586E+00 + -0.1204696938417461E+00 + -0.1203476159177431E+00 + -0.1202256187399625E+00 + -0.1201037022732793E+00 + -0.1199818664787163E+00 + -0.1198601113109402E+00 + -0.1197384367240286E+00 + -0.1196168426775779E+00 + -0.1194953291411729E+00 + -0.1193738960853651E+00 + -0.1192525434761075E+00 + -0.1191312712703869E+00 + -0.1190100794241156E+00 + -0.1188889678955361E+00 + -0.1187679366479245E+00 + -0.1186469856451582E+00 + -0.1185261148506963E+00 + -0.1184053242270906E+00 + -0.1182846137367192E+00 + -0.1181639833412113E+00 + -0.1180434330003739E+00 + -0.1179229626736872E+00 + -0.1178025723215223E+00 + -0.1176822619068136E+00 + -0.1175620313928933E+00 + -0.1174418807419686E+00 + -0.1173218099129408E+00 + -0.1172018188640453E+00 + -0.1170819075549516E+00 + -0.1169620759502016E+00 + -0.1168423240153076E+00 + -0.1167226517142521E+00 + -0.1166030590055864E+00 + -0.1164835458465880E+00 + -0.1163641121958563E+00 + -0.1162447580174109E+00 + -0.1161254832765843E+00 + -0.1160062879374338E+00 + -0.1158871719586117E+00 + -0.1157681352972572E+00 + -0.1156491779114609E+00 + -0.1155302997640710E+00 + -0.1154115008193244E+00 + -0.1152927810408776E+00 + -0.1151741403895411E+00 + -0.1150555788251592E+00 + -0.1149370963076781E+00 + -0.1148186927978812E+00 + -0.1147003682568178E+00 + -0.1145821226453671E+00 + -0.1144639559235887E+00 + -0.1143458680511920E+00 + -0.1142278589881438E+00 + -0.1141099286965252E+00 + -0.1139920771392917E+00 + -0.1138743042790241E+00 + -0.1137566100757230E+00 + -0.1136389944881601E+00 + -0.1135214574753668E+00 + -0.1134039989990225E+00 + -0.1132866190221251E+00 + -0.1131693175073057E+00 + -0.1130520944140455E+00 + -0.1129349497000662E+00 + -0.1128178833234588E+00 + -0.1127008952468700E+00 + -0.1125839854356547E+00 + -0.1124671538546974E+00 + -0.1123504004634343E+00 + -0.1122337252177425E+00 + -0.1121171280735861E+00 + -0.1120006089894893E+00 + -0.1118841679257666E+00 + -0.1117678048429935E+00 + -0.1116515197057259E+00 + -0.1115353124815531E+00 + -0.1114191831375420E+00 + -0.1113031316314377E+00 + -0.1111871579132479E+00 + -0.1110712619332622E+00 + -0.1109554436525687E+00 + -0.1108397030419497E+00 + -0.1107240400720925E+00 + -0.1106084547049653E+00 + -0.1104929468940517E+00 + -0.1103775165925778E+00 + -0.1102621637573782E+00 + -0.1101468883490944E+00 + -0.1100316903285517E+00 + -0.1099165696580001E+00 + -0.1098015263013223E+00 + -0.1096865602223932E+00 + -0.1095716713832459E+00 + -0.1094568597436449E+00 + -0.1093421252631348E+00 + -0.1092274678998561E+00 + -0.1091128876100839E+00 + -0.1089983843499837E+00 + -0.1088839580791838E+00 + -0.1087696087623731E+00 + -0.1086553363645519E+00 + -0.1085411408478280E+00 + -0.1084270221697726E+00 + -0.1083129802875322E+00 + -0.1081990151599763E+00 + -0.1080851267489626E+00 + -0.1079713150165854E+00 + -0.1078575799234868E+00 + -0.1077439214276444E+00 + -0.1076303394867077E+00 + -0.1075168340594048E+00 + -0.1074034051067014E+00 + -0.1072900525897888E+00 + -0.1071767764692265E+00 + -0.1070635767042408E+00 + -0.1069504532538403E+00 + -0.1068374060781712E+00 + -0.1067244351401854E+00 + -0.1066115404032047E+00 + -0.1064987218286840E+00 + -0.1063859793732531E+00 + -0.1062733129927173E+00 + -0.1061607226446855E+00 + -0.1060482082920391E+00 + -0.1059357698985602E+00 + -0.1058234074262553E+00 + -0.1057111208316539E+00 + -0.1055989100701724E+00 + -0.1054867750986892E+00 + -0.1053747158792358E+00 + -0.1052627323749138E+00 + -0.1051508245476842E+00 + -0.1050389923553381E+00 + -0.1049272357546459E+00 + -0.1048155547036895E+00 + -0.1047039491661300E+00 + -0.1045924191070345E+00 + -0.1044809644898624E+00 + -0.1043695852709479E+00 + -0.1042582814045713E+00 + -0.1041470528461203E+00 + -0.1040358995566920E+00 + -0.1039248214991225E+00 + -0.1038138186353327E+00 + -0.1037028909224527E+00 + -0.1035920383159524E+00 + -0.1034812607725197E+00 + -0.1033705582564009E+00 + -0.1032599307346187E+00 + -0.1031493781727808E+00 + -0.1030389005273724E+00 + -0.1029284977511522E+00 + -0.1028181697977637E+00 + -0.1027079166276872E+00 + -0.1025977382043983E+00 + -0.1024876344910341E+00 + -0.1023776054482358E+00 + -0.1022676510354170E+00 + -0.1021577712116873E+00 + -0.1020479659338977E+00 + -0.1019382351576923E+00 + -0.1018285788392561E+00 + -0.1017189969406569E+00 + -0.1016094894272938E+00 + -0.1015000562639953E+00 + -0.1013906974093375E+00 + -0.1012814128180092E+00 + -0.1011722024449236E+00 + -0.1010630662490186E+00 + -0.1009540041919215E+00 + -0.1008450162352192E+00 + -0.1007361023398558E+00 + -0.1006272624662935E+00 + -0.1005184965748400E+00 + -0.1004098046242281E+00 + -0.1003011865719375E+00 + -0.1001926423754837E+00 + -0.1000841719944051E+00 + -0.9997577538996357E-01 + -0.9986745252331609E-01 + -0.9975920335324346E-01 + -0.9965102783631888E-01 + -0.9954292592911267E-01 + -0.9943489759111126E-01 + -0.9932694278473219E-01 + -0.9921906147242561E-01 + -0.9911125361519037E-01 + -0.9900351917244992E-01 + -0.9889585810346844E-01 + -0.9878827036637144E-01 + -0.9868075591794892E-01 + -0.9857331471491820E-01 + -0.9846594671582338E-01 + -0.9835865188155644E-01 + -0.9825143017313362E-01 + -0.9814428155218653E-01 + -0.9803720598121696E-01 + -0.9793020342267223E-01 + -0.9782327383474790E-01 + -0.9771641716927142E-01 + -0.9760963337758737E-01 + -0.9750292241713945E-01 + -0.9739628425535550E-01 + -0.9728971886048786E-01 + -0.9718322619571920E-01 + -0.9707680621527898E-01 + -0.9697045887245563E-01 + -0.9686418412308772E-01 + -0.9675798192797485E-01 + -0.9665185224843857E-01 + -0.9654579504552331E-01 + -0.9643981027974109E-01 + -0.9633389791149110E-01 + -0.9622805789971483E-01 + -0.9612229020008495E-01 + -0.9601659476778641E-01 + -0.9591097156119691E-01 + -0.9580542054672501E-01 + -0.9569994169196631E-01 + -0.9559453495981689E-01 + -0.9548920030045206E-01 + -0.9538393766186402E-01 + -0.9527874699695699E-01 + -0.9517362827335861E-01 + -0.9506858146138752E-01 + -0.9496360652746507E-01 + -0.9485870342540959E-01 + -0.9475387210643827E-01 + -0.9464911252367486E-01 + -0.9454442463717662E-01 + -0.9443980840851140E-01 + -0.9433526379966892E-01 + -0.9423079077442043E-01 + -0.9412638929693973E-01 + -0.9402205932935541E-01 + -0.9391780082517231E-01 + -0.9381361373554597E-01 + -0.9370949801361729E-01 + -0.9360545362205091E-01 + -0.9350148052627761E-01 + -0.9339757869035324E-01 + -0.9329374807141315E-01 + -0.9318998862433549E-01 + -0.9308630030511013E-01 + -0.9298268307626396E-01 + -0.9287913690259519E-01 + -0.9277566174754947E-01 + -0.9267225756635273E-01 + -0.9256892431104014E-01 + -0.9246566193495573E-01 + -0.9236247040075742E-01 + -0.9225934967498690E-01 + -0.9215629972319329E-01 + -0.9205332050359383E-01 + -0.9195041197102551E-01 + -0.9184757408069549E-01 + -0.9174480679140640E-01 + -0.9164211006372858E-01 + -0.9153948385797952E-01 + -0.9143692813237513E-01 + -0.9133444284397228E-01 + -0.9123202795021197E-01 + -0.9112968341303509E-01 + -0.9102740919701541E-01 + -0.9092520526620886E-01 + -0.9082307157878237E-01 + -0.9072100808911856E-01 + -0.9061901475179807E-01 + -0.9051709152529323E-01 + -0.9041523837076468E-01 + -0.9031345524935563E-01 + -0.9021174212177334E-01 + -0.9011009894838445E-01 + -0.9000852568937068E-01 + -0.8990702230268335E-01 + -0.8980558874444618E-01 + -0.8970422497092125E-01 + -0.8960293094274459E-01 + -0.8950170662441202E-01 + -0.8940055198020451E-01 + -0.8929946696782151E-01 + -0.8919845153865651E-01 + -0.8909750564416212E-01 + -0.8899662924458541E-01 + -0.8889582230930117E-01 + -0.8879508480777645E-01 + -0.8869441670105173E-01 + -0.8859381794069881E-01 + -0.8849328847789746E-01 + -0.8839282826910244E-01 + -0.8829243727720522E-01 + -0.8819211546539730E-01 + -0.8809186279483413E-01 + -0.8799167922399763E-01 + -0.8789156471113159E-01 + -0.8779151921380384E-01 + -0.8769154268863485E-01 + -0.8759163509219828E-01 + -0.8749179638520877E-01 + -0.8739202653483796E-01 + -0.8729232550869714E-01 + -0.8719269326818329E-01 + -0.8709312976424128E-01 + -0.8699363494681927E-01 + -0.8689420877107851E-01 + -0.8679485120177654E-01 + -0.8669556220463338E-01 + -0.8659634174174439E-01 + -0.8649718976801903E-01 + -0.8639810623749373E-01 + -0.8629909110793054E-01 + -0.8620014434523382E-01 + -0.8610126591632536E-01 + -0.8600245578416011E-01 + -0.8590371390236308E-01 + -0.8580504022317566E-01 + -0.8570643470141688E-01 + -0.8560789729863785E-01 + -0.8550942797742540E-01 + -0.8541102670001791E-01 + -0.8531269342775081E-01 + -0.8521442812176485E-01 + -0.8511623074204026E-01 + -0.8501810124506775E-01 + -0.8492003958662947E-01 + -0.8482204572341200E-01 + -0.8472411961526436E-01 + -0.8462626122266837E-01 + -0.8452847050665396E-01 + -0.8443074743039940E-01 + -0.8433309195754822E-01 + -0.8423550405017437E-01 + -0.8413798366411193E-01 + -0.8404053075357727E-01 + -0.8394314527390412E-01 + -0.8384582718555766E-01 + -0.8374857645039885E-01 + -0.8365139302964881E-01 + -0.8355427688156871E-01 + -0.8345722796348710E-01 + -0.8336024623389513E-01 + -0.8326333165770777E-01 + -0.8316648420195650E-01 + -0.8306970383169652E-01 + -0.8297299050053981E-01 + -0.8287634415789480E-01 + -0.8277976475476335E-01 + -0.8268325225277115E-01 + -0.8258680661775014E-01 + -0.8249042781504155E-01 + -0.8239411580665397E-01 + -0.8229787055312382E-01 + -0.8220169201457775E-01 + -0.8210558014825809E-01 + -0.8200953491001712E-01 + -0.8191355625607255E-01 + -0.8181764414624087E-01 + -0.8172179854217328E-01 + -0.8162601940538277E-01 + -0.8153030669626594E-01 + -0.8143466037457474E-01 + -0.8133908040007823E-01 + -0.8124356673321509E-01 + -0.8114811933481549E-01 + -0.8105273816552694E-01 + -0.8095742318419834E-01 + -0.8086217434847438E-01 + -0.8076699161603266E-01 + -0.8067187494581930E-01 + -0.8057682429767821E-01 + -0.8048183963151381E-01 + -0.8038692090844947E-01 + -0.8029206809054756E-01 + -0.8019728113976283E-01 + -0.8010256001643899E-01 + -0.8000790467955515E-01 + -0.7991331508803140E-01 + -0.7981879120124051E-01 + -0.7972433297896478E-01 + -0.7962994038094042E-01 + -0.7953561336641116E-01 + -0.7944135189413224E-01 + -0.7934715592284571E-01 + -0.7925302541252211E-01 + -0.7915896032445179E-01 + -0.7906496061993105E-01 + -0.7897102625964193E-01 + -0.7887715720355969E-01 + -0.7878335341160884E-01 + -0.7868961484469674E-01 + -0.7859594146497875E-01 + -0.7850233323457324E-01 + -0.7840879011217172E-01 + -0.7831531205180714E-01 + -0.7822189900723403E-01 + -0.7812855093738504E-01 + -0.7803526780887164E-01 + -0.7794204958882862E-01 + -0.7784889624032767E-01 + -0.7775580771994157E-01 + -0.7766278398363449E-01 + -0.7756982498885706E-01 + -0.7747693069568241E-01 + -0.7738410106441618E-01 + -0.7729133605596097E-01 + -0.7719863563239082E-01 + -0.7710599975586669E-01 + -0.7701342838740633E-01 + -0.7692092148571287E-01 + -0.7682847900917126E-01 + -0.7673610091721140E-01 + -0.7664378717166303E-01 + -0.7655153773464560E-01 + -0.7645935256745141E-01 + -0.7636723162940601E-01 + -0.7627517487950353E-01 + -0.7618318227653635E-01 + -0.7609125377882885E-01 + -0.7599938934459406E-01 + -0.7590758893326589E-01 + -0.7581585250793060E-01 + -0.7572418003230544E-01 + -0.7563257146919101E-01 + -0.7554102677853994E-01 + -0.7544954591970345E-01 + -0.7535812885247221E-01 + -0.7526677553828245E-01 + -0.7517548593889849E-01 + -0.7508426001501984E-01 + -0.7499309772337035E-01 + -0.7490199901968689E-01 + -0.7481096386160267E-01 + -0.7471999221487779E-01 + -0.7462908404738399E-01 + -0.7453823932455805E-01 + -0.7444745800072662E-01 + -0.7435674002697866E-01 + -0.7426608535684652E-01 + -0.7417549395642695E-01 + -0.7408496579576207E-01 + -0.7399450084303217E-01 + -0.7390409905621718E-01 + -0.7381376038974135E-01 + -0.7372348479878825E-01 + -0.7363327224342720E-01 + -0.7354312268554917E-01 + -0.7345303608727348E-01 + -0.7336301241246437E-01 + -0.7327305162568293E-01 + -0.7318315369061192E-01 + -0.7309331856464406E-01 + -0.7300354620231937E-01 + -0.7291383655890211E-01 + -0.7282418959601898E-01 + -0.7273460527839325E-01 + -0.7264508357040329E-01 + -0.7255562443340869E-01 + -0.7246622782714151E-01 + -0.7237689371130374E-01 + -0.7228762204581928E-01 + -0.7219841279072324E-01 + -0.7210926590617444E-01 + -0.7202018135411082E-01 + -0.7193115909757585E-01 + -0.7184219909940522E-01 + -0.7175330132005112E-01 + -0.7166446571832498E-01 + -0.7157569225314607E-01 + -0.7148698088593054E-01 + -0.7139833157993440E-01 + -0.7130974429823493E-01 + -0.7122121900093897E-01 + -0.7113275564575958E-01 + -0.7104435419054545E-01 + -0.7095601459752141E-01 + -0.7086773683271531E-01 + -0.7077952086197852E-01 + -0.7069136664557973E-01 + -0.7060327413852137E-01 + -0.7051524329575215E-01 + -0.7042727407677929E-01 + -0.7033936644576699E-01 + -0.7025152036703844E-01 + -0.7016373580446063E-01 + -0.7007601272140050E-01 + -0.6998835108108203E-01 + -0.6990075084406801E-01 + -0.6981321196773887E-01 + -0.6972573440932535E-01 + -0.6963831812903156E-01 + -0.6955096309093762E-01 + -0.6946366925930305E-01 + -0.6937643659627547E-01 + -0.6928926506104133E-01 + -0.6920215461255859E-01 + -0.6911510521156776E-01 + -0.6902811682155545E-01 + -0.6894118940617915E-01 + -0.6885432292717093E-01 + -0.6876751734309360E-01 + -0.6868077261220106E-01 + -0.6859408869523129E-01 + -0.6850746555743287E-01 + -0.6842090316447664E-01 + -0.6833440147975595E-01 + -0.6824796046223524E-01 + -0.6816158007033391E-01 + -0.6807526026337923E-01 + -0.6798900100268042E-01 + -0.6790280224977102E-01 + -0.6781666396700341E-01 + -0.6773058611868432E-01 + -0.6764456866936176E-01 + -0.6755861158180188E-01 + -0.6747271481430722E-01 + -0.6738687832445063E-01 + -0.6730110207129005E-01 + -0.6721538601807467E-01 + -0.6712973012874236E-01 + -0.6704413436692804E-01 + -0.6695859869542330E-01 + -0.6687312307682990E-01 + -0.6678770747339307E-01 + -0.6670235184626279E-01 + -0.6661705615633134E-01 + -0.6653182036420877E-01 + -0.6644664442958036E-01 + -0.6636152831189062E-01 + -0.6627647197170222E-01 + -0.6619147537415353E-01 + -0.6610653848549587E-01 + -0.6602166127065248E-01 + -0.6593684368886552E-01 + -0.6585208569779688E-01 + -0.6576738725632746E-01 + -0.6568274832933518E-01 + -0.6559816888346736E-01 + -0.6551364888407894E-01 + -0.6542918828987443E-01 + -0.6534478705735250E-01 + -0.6526044514445618E-01 + -0.6517616251767583E-01 + -0.6509193914654193E-01 + -0.6500777499895891E-01 + -0.6492367003265614E-01 + -0.6483962420135509E-01 + -0.6475563745998701E-01 + -0.6467170977226790E-01 + -0.6458784110564570E-01 + -0.6450403142723031E-01 + -0.6442028070164396E-01 + -0.6433658889233142E-01 + -0.6425295596217783E-01 + -0.6416938186962407E-01 + -0.6408586657083855E-01 + -0.6400241002286464E-01 + -0.6391901219153782E-01 + -0.6383567304752446E-01 + -0.6375239256063394E-01 + -0.6366917069143423E-01 + -0.6358600739494198E-01 + -0.6350290262664755E-01 + -0.6341985634892654E-01 + -0.6333686852861965E-01 + -0.6325393913236579E-01 + -0.6317106812355848E-01 + -0.6308825546329048E-01 + -0.6300550111264140E-01 + -0.6292280503372274E-01 + -0.6284016718942630E-01 + -0.6275758754256072E-01 + -0.6267506605477223E-01 + -0.6259260268673693E-01 + -0.6251019739923970E-01 + -0.6242785015637534E-01 + -0.6234556092520935E-01 + -0.6226332967273804E-01 + -0.6218115636281106E-01 + -0.6209904095621400E-01 + -0.6201698341358766E-01 + -0.6193498369599855E-01 + -0.6185304176496432E-01 + -0.6177115758202523E-01 + -0.6168933110977251E-01 + -0.6160756231200289E-01 + -0.6152585115252382E-01 + -0.6144419759436810E-01 + -0.6136260159961844E-01 + -0.6128106313030708E-01 + -0.6119958215025388E-01 + -0.6111815862569042E-01 + -0.6103679252293103E-01 + -0.6095548380547053E-01 + -0.6087423243271706E-01 + -0.6079303836375737E-01 + -0.6071190155995189E-01 + -0.6063082198627257E-01 + -0.6054979960797827E-01 + -0.6046883439028356E-01 + -0.6038792629835291E-01 + -0.6030707529729429E-01 + -0.6022628135015975E-01 + -0.6014554441619769E-01 + -0.6006486445422146E-01 + -0.5998424142509559E-01 + -0.5990367529388512E-01 + -0.5982316602612869E-01 + -0.5974271358643538E-01 + -0.5966231793740397E-01 + -0.5958197904133779E-01 + -0.5950169686201676E-01 + -0.5942147136682788E-01 + -0.5934130252365646E-01 + -0.5926119029773675E-01 + -0.5918113464738969E-01 + -0.5910113552978316E-01 + -0.5902119290424760E-01 + -0.5894130673639785E-01 + -0.5886147699294257E-01 + -0.5878170364037526E-01 + -0.5870198664458714E-01 + -0.5862232597132355E-01 + -0.5854272158509578E-01 + -0.5846317344625019E-01 + -0.5838368151420839E-01 + -0.5830424574970281E-01 + -0.5822486611851262E-01 + -0.5814554258758125E-01 + -0.5806627512281994E-01 + -0.5798706368597753E-01 + -0.5790790823769929E-01 + -0.5782880873977979E-01 + -0.5774976515935469E-01 + -0.5767077746505008E-01 + -0.5759184562439085E-01 + -0.5751296959955630E-01 + -0.5743414935104109E-01 + -0.5735538484001202E-01 + -0.5727667603147337E-01 + -0.5719802289171025E-01 + -0.5711942538627108E-01 + -0.5704088347644616E-01 + -0.5696239712192126E-01 + -0.5688396628341421E-01 + -0.5680559092868286E-01 + -0.5672727102832024E-01 + -0.5664900655199499E-01 + -0.5657079746278598E-01 + -0.5649264372083783E-01 + -0.5641454528649401E-01 + -0.5633650212206003E-01 + -0.5625851419076823E-01 + -0.5618058145627439E-01 + -0.5610270388621901E-01 + -0.5602488145031695E-01 + -0.5594711411757927E-01 + -0.5586940185016848E-01 + -0.5579174460632692E-01 + -0.5571414234484289E-01 + -0.5563659503137660E-01 + -0.5555910263583190E-01 + -0.5548166512773891E-01 + -0.5540428247161733E-01 + -0.5532695462860708E-01 + -0.5524968155995355E-01 + -0.5517246322966511E-01 + -0.5509529960375563E-01 + -0.5501819064816784E-01 + -0.5494113632750063E-01 + -0.5486413660528436E-01 + -0.5478719144512455E-01 + -0.5471030081303564E-01 + -0.5463346467708941E-01 + -0.5455668300521096E-01 + -0.5447995576161773E-01 + -0.5440328290708410E-01 + -0.5432666440235538E-01 + -0.5425010021130468E-01 + -0.5417359030094916E-01 + -0.5409713463839907E-01 + -0.5402073319034587E-01 + -0.5394438592302921E-01 + -0.5386809280258897E-01 + -0.5379185379370198E-01 + -0.5371566885932365E-01 + -0.5363953796233085E-01 + -0.5356346106755828E-01 + -0.5348743814235472E-01 + -0.5341146915414377E-01 + -0.5333555406766698E-01 + -0.5325969284395979E-01 + -0.5318388544383844E-01 + -0.5310813183289092E-01 + -0.5303243198389989E-01 + -0.5295678587012854E-01 + -0.5288119345879570E-01 + -0.5280565470727110E-01 + -0.5273016957205052E-01 + -0.5265473801566925E-01 + -0.5257936001140301E-01 + -0.5250403553355374E-01 + -0.5242876455046385E-01 + -0.5235354701901109E-01 + -0.5227838289477045E-01 + -0.5220327213929329E-01 + -0.5212821472671479E-01 + -0.5205321063271250E-01 + -0.5197825982834083E-01 + -0.5190336227411986E-01 + -0.5182851792907936E-01 + -0.5175372675464888E-01 + -0.5167898871829596E-01 + -0.5160430378838625E-01 + -0.5152967193256357E-01 + -0.5145509311655996E-01 + -0.5138056730575823E-01 + -0.5130609446597248E-01 + -0.5123167456436847E-01 + -0.5115730756833543E-01 + -0.5108299344410728E-01 + -0.5100873215422206E-01 + -0.5093452366043926E-01 + -0.5086036792650726E-01 + -0.5078626492336616E-01 + -0.5071221462353774E-01 + -0.5063821699774317E-01 + -0.5056427200973895E-01 + -0.5049037962155199E-01 + -0.5041653979567583E-01 + -0.5034275249671675E-01 + -0.5026901768982436E-01 + -0.5019533534105923E-01 + -0.5012170542089068E-01 + -0.5004812790106350E-01 + -0.4997460275180702E-01 + -0.4990112993564822E-01 + -0.4982770941261157E-01 + -0.4975434114410034E-01 + -0.4968102509951034E-01 + -0.4960776125103255E-01 + -0.4953454956980586E-01 + -0.4946139002054048E-01 + -0.4938828256545248E-01 + -0.4931522716754737E-01 + -0.4924222379548443E-01 + -0.4916927242027938E-01 + -0.4909637301231591E-01 + -0.4902352553732396E-01 + -0.4895072995888558E-01 + -0.4887798624069562E-01 + -0.4880529434773242E-01 + -0.4873265424559779E-01 + -0.4866006590038982E-01 + -0.4858752928302631E-01 + -0.4851504436702589E-01 + -0.4844261112499670E-01 + -0.4837022952015766E-01 + -0.4829789951017988E-01 + -0.4822562105355663E-01 + -0.4815339411942537E-01 + -0.4808121868372462E-01 + -0.4800909472194295E-01 + -0.4793702220266341E-01 + -0.4786500108966440E-01 + -0.4779303134670474E-01 + -0.4772111293910072E-01 + -0.4764924583333349E-01 + -0.4757742999590105E-01 + -0.4750566539357647E-01 + -0.4743395199335191E-01 + -0.4736228976230386E-01 + -0.4729067866949267E-01 + -0.4721911868572958E-01 + -0.4714760978169236E-01 + -0.4707615192449587E-01 + -0.4700474507783922E-01 + -0.4693338920537577E-01 + -0.4686208427376140E-01 + -0.4679083025277045E-01 + -0.4671962711229230E-01 + -0.4664847482213025E-01 + -0.4657737335199485E-01 + -0.4650632267148792E-01 + -0.4643532274761412E-01 + -0.4636437354422053E-01 + -0.4629347502498754E-01 + -0.4622262715581373E-01 + -0.4615182990553766E-01 + -0.4608108324319174E-01 + -0.4601038713876537E-01 + -0.4593974156363220E-01 + -0.4586914648920710E-01 + -0.4579860188452703E-01 + -0.4572810771494925E-01 + -0.4565766394550455E-01 + -0.4558727054272137E-01 + -0.4551692747567731E-01 + -0.4544663471366242E-01 + -0.4537639222531205E-01 + -0.4530619997808463E-01 + -0.4523605793929284E-01 + -0.4516596607721543E-01 + -0.4509592436208799E-01 + -0.4502593276435007E-01 + -0.4495599125390932E-01 + -0.4488609979955344E-01 + -0.4481625836989159E-01 + -0.4474646693201191E-01 + -0.4467672544944195E-01 + -0.4460703388517460E-01 + -0.4453739220582914E-01 + -0.4446780038744590E-01 + -0.4439825840754056E-01 + -0.4432876623992888E-01 + -0.4425932384802912E-01 + -0.4418993119341220E-01 + -0.4412058824012062E-01 + -0.4405129495989745E-01 + -0.4398205132594463E-01 + -0.4391285731081149E-01 + -0.4384371288490535E-01 + -0.4377461801815893E-01 + -0.4370557267898809E-01 + -0.4363657683026867E-01 + -0.4356763043356843E-01 + -0.4349873345333005E-01 + -0.4342988586577151E-01 + -0.4336108765008190E-01 + -0.4329233878301865E-01 + -0.4322363923059230E-01 + -0.4315498895579977E-01 + -0.4308638792277469E-01 + -0.4301783610132922E-01 + -0.4294933346298694E-01 + -0.4288087997893093E-01 + -0.4281247561863737E-01 + -0.4274412035099384E-01 + -0.4267581414503353E-01 + -0.4260755697079455E-01 + -0.4253934879866353E-01 + -0.4247118959889990E-01 + -0.4240307934108881E-01 + -0.4233501799452940E-01 + -0.4226700552854145E-01 + -0.4219904191277331E-01 + -0.4213112711699999E-01 + -0.4206326111101713E-01 + -0.4199544386497390E-01 + -0.4192767534917246E-01 + -0.4185995553387203E-01 + -0.4179228438916918E-01 + -0.4172466188506316E-01 + -0.4165708799154042E-01 + -0.4158956267871833E-01 + -0.4152208591677513E-01 + -0.4145465767586692E-01 + -0.4138727792617321E-01 + -0.4131994663787710E-01 + -0.4125266378114867E-01 + -0.4118542932630726E-01 + -0.4111824324376144E-01 + -0.4105110550391551E-01 + -0.4098401607743999E-01 + -0.4091697493518831E-01 + -0.4084998204797044E-01 + -0.4078303738626305E-01 + -0.4071614092027724E-01 + -0.4064929262021470E-01 + -0.4058249245667044E-01 + -0.4051574040056780E-01 + -0.4044903642281641E-01 + -0.4038238049435828E-01 + -0.4031577258616200E-01 + -0.4024921266916303E-01 + -0.4018270071409797E-01 + -0.4011623669150578E-01 + -0.4004982057191350E-01 + -0.3998345232642430E-01 + -0.3991713192676075E-01 + -0.3985085934463373E-01 + -0.3978463455122919E-01 + -0.3971845751712820E-01 + -0.3965232821286738E-01 + -0.3958624660951290E-01 + -0.3952021267880518E-01 + -0.3945422639249848E-01 + -0.3938828772215619E-01 + -0.3932239663909050E-01 + -0.3925655311457263E-01 + -0.3919075711996563E-01 + -0.3912500862678193E-01 + -0.3905930760652134E-01 + -0.3899365403069206E-01 + -0.3892804787083187E-01 + -0.3886248909845790E-01 + -0.3879697768514004E-01 + -0.3873151360256092E-01 + -0.3866609682239304E-01 + -0.3860072731655082E-01 + -0.3853540505743245E-01 + -0.3847013001746502E-01 + -0.3840490216881554E-01 + -0.3833972148314227E-01 + -0.3827458793201766E-01 + -0.3820950148709732E-01 + -0.3814446212025793E-01 + -0.3807946980338379E-01 + -0.3801452450861708E-01 + -0.3794962620877023E-01 + -0.3788477487673440E-01 + -0.3781997048513511E-01 + -0.3775521300593287E-01 + -0.3769050241095578E-01 + -0.3762583867222367E-01 + -0.3756122176236706E-01 + -0.3749665165410648E-01 + -0.3743212832011884E-01 + -0.3736765173300101E-01 + -0.3730322186531220E-01 + -0.3723883868964243E-01 + -0.3717450217875405E-01 + -0.3711021230542663E-01 + -0.3704596904238422E-01 + -0.3698177236221085E-01 + -0.3691762223743748E-01 + -0.3685351864077821E-01 + -0.3678946154580534E-01 + -0.3672545092629800E-01 + -0.3666148675581324E-01 + -0.3659756900697235E-01 + -0.3653369765210867E-01 + -0.3646987266370191E-01 + -0.3640609401508248E-01 + -0.3634236167983231E-01 + -0.3627867563148802E-01 + -0.3621503584344952E-01 + -0.3615144228905300E-01 + -0.3608789494164000E-01 + -0.3602439377471712E-01 + -0.3596093876183753E-01 + -0.3589752987652345E-01 + -0.3583416709223109E-01 + -0.3577085038237464E-01 + -0.3570757972041962E-01 + -0.3564435508037398E-01 + -0.3558117643647624E-01 + -0.3551804376288735E-01 + -0.3545495703330221E-01 + -0.3539191622117391E-01 + -0.3532892129999613E-01 + -0.3526597224384789E-01 + -0.3520306902710923E-01 + -0.3514021162410975E-01 + -0.3507740000886871E-01 + -0.3501463415521458E-01 + -0.3495191403699649E-01 + -0.3488923962857061E-01 + -0.3482661090460353E-01 + -0.3476402783972620E-01 + -0.3470149040833985E-01 + -0.3463899858468088E-01 + -0.3457655234297897E-01 + -0.3451415165773252E-01 + -0.3445179650363311E-01 + -0.3438948685535621E-01 + -0.3432722268760977E-01 + -0.3426500397512341E-01 + -0.3420283069260263E-01 + -0.3414070281471742E-01 + -0.3407862031610347E-01 + -0.3401658317139405E-01 + -0.3395459135565444E-01 + -0.3389264484435656E-01 + -0.3383074361294829E-01 + -0.3376888763645363E-01 + -0.3370707688946318E-01 + -0.3364531134654941E-01 + -0.3358359098294390E-01 + -0.3352191577461118E-01 + -0.3346028569751257E-01 + -0.3339870072698454E-01 + -0.3333716083761842E-01 + -0.3327566600396172E-01 + -0.3321421620142189E-01 + -0.3315281140653288E-01 + -0.3309145159586969E-01 + -0.3303013674540626E-01 + -0.3296886683027728E-01 + -0.3290764182553799E-01 + -0.3284646170655181E-01 + -0.3278532644916611E-01 + -0.3272423602925119E-01 + -0.3266319042292229E-01 + -0.3260218960671657E-01 + -0.3254123355718607E-01 + -0.3248032225049995E-01 + -0.3241945566215588E-01 + -0.3235863376756420E-01 + -0.3229785654263054E-01 + -0.3223712396425575E-01 + -0.3217643600943454E-01 + -0.3211579265490123E-01 + -0.3205519387685802E-01 + -0.3199463965141940E-01 + -0.3193412995485174E-01 + -0.3187366476380724E-01 + -0.3181324405497276E-01 + -0.3175286780504872E-01 + -0.3169253599080566E-01 + -0.3163224858900565E-01 + -0.3157200557654866E-01 + -0.3151180693075739E-01 + -0.3145165262900877E-01 + -0.3139154264844513E-01 + -0.3133147696554433E-01 + -0.3127145555664002E-01 + -0.3121147839830516E-01 + -0.3115154546796060E-01 + -0.3109165674318525E-01 + -0.3103181220162334E-01 + -0.3097201182121668E-01 + -0.3091225557995720E-01 + -0.3085254345559236E-01 + -0.3079287542496007E-01 + -0.3073325146465472E-01 + -0.3067367155154987E-01 + -0.3061413566381835E-01 + -0.3055464377997208E-01 + -0.3049519587837801E-01 + -0.3043579193678904E-01 + -0.3037643193275867E-01 + -0.3031711584389732E-01 + -0.3025784364820852E-01 + -0.3019861532381008E-01 + -0.3013943084882910E-01 + -0.3008029020155166E-01 + -0.3002119336030649E-01 + -0.2996214030341787E-01 + -0.2990313100929789E-01 + -0.2984416545638009E-01 + -0.2978524362307585E-01 + -0.2972636548777342E-01 + -0.2966753102883855E-01 + -0.2960874022467989E-01 + -0.2954999305418137E-01 + -0.2949128949643711E-01 + -0.2943262953049890E-01 + -0.2937401313520648E-01 + -0.2931544028928154E-01 + -0.2925691097145183E-01 + -0.2919842516069222E-01 + -0.2913998283610463E-01 + -0.2908158397679529E-01 + -0.2902322856210487E-01 + -0.2896491657150646E-01 + -0.2890664798444042E-01 + -0.2884842278016808E-01 + -0.2879024093782677E-01 + -0.2873210243655949E-01 + -0.2867400725585973E-01 + -0.2861595537546319E-01 + -0.2855794677510703E-01 + -0.2849998143476285E-01 + -0.2844205933457580E-01 + -0.2838418045465559E-01 + -0.2832634477475612E-01 + -0.2826855227433274E-01 + -0.2821080293284105E-01 + -0.2815309673028917E-01 + -0.2809543364717928E-01 + -0.2803781366401034E-01 + -0.2798023676122543E-01 + -0.2792270291921355E-01 + -0.2786521211834376E-01 + -0.2780776433901573E-01 + -0.2775035956166249E-01 + -0.2769299776670835E-01 + -0.2763567893482218E-01 + -0.2757840304695516E-01 + -0.2752117008404827E-01 + -0.2746398002678141E-01 + -0.2740683285551691E-01 + -0.2734972855059393E-01 + -0.2729266709300720E-01 + -0.2723564846463868E-01 + -0.2717867264740492E-01 + -0.2712173962270517E-01 + -0.2706484937119456E-01 + -0.2700800187345984E-01 + -0.2695119711064265E-01 + -0.2689443506477257E-01 + -0.2683771571793506E-01 + -0.2678103905179663E-01 + -0.2672440504731895E-01 + -0.2666781368538258E-01 + -0.2661126494752914E-01 + -0.2655475881655085E-01 + -0.2649829527535689E-01 + -0.2644187430639192E-01 + -0.2638549589117769E-01 + -0.2632916001110844E-01 + -0.2627286664780470E-01 + -0.2621661578341181E-01 + -0.2616040740012946E-01 + -0.2610424148037436E-01 + -0.2604811800711333E-01 + -0.2599203696337811E-01 + -0.2593599833203945E-01 + -0.2588000209557582E-01 + -0.2582404823638587E-01 + -0.2576813673695242E-01 + -0.2571226758003681E-01 + -0.2565644074843481E-01 + -0.2560065622506746E-01 + -0.2554491399329107E-01 + -0.2548921403653226E-01 + -0.2543355633813916E-01 + -0.2537794088123233E-01 + -0.2532236764886913E-01 + -0.2526683662418816E-01 + -0.2521134779068831E-01 + -0.2515590113193895E-01 + -0.2510049663148632E-01 + -0.2504513427283892E-01 + -0.2498981403948150E-01 + -0.2493453591509716E-01 + -0.2487929988433443E-01 + -0.2482410593210285E-01 + -0.2476895404302462E-01 + -0.2471384420036217E-01 + -0.2465877638694296E-01 + -0.2460375058590898E-01 + -0.2454876678220414E-01 + -0.2449382496137356E-01 + -0.2443892510880063E-01 + -0.2438406720898093E-01 + -0.2432925124606889E-01 + -0.2427447720426369E-01 + -0.2421974506816441E-01 + -0.2416505482252222E-01 + -0.2411040645212885E-01 + -0.2405579994218061E-01 + -0.2400123527804306E-01 + -0.2394671244503291E-01 + -0.2389223142818687E-01 + -0.2383779221239767E-01 + -0.2378339478260992E-01 + -0.2372903912437299E-01 + -0.2367472522354563E-01 + -0.2362045306598472E-01 + -0.2356622263765246E-01 + -0.2351203392456346E-01 + -0.2345788691267008E-01 + -0.2340378158739922E-01 + -0.2334971793384597E-01 + -0.2329569593719008E-01 + -0.2324171558391050E-01 + -0.2318777686135428E-01 + -0.2313387975680344E-01 + -0.2308002425661839E-01 + -0.2302621034648299E-01 + -0.2297243801209529E-01 + -0.2291870723985628E-01 + -0.2286501801671934E-01 + -0.2281137032964056E-01 + -0.2275776416562144E-01 + -0.2270419951170042E-01 + -0.2265067635490373E-01 + -0.2259719468229472E-01 + -0.2254375448097040E-01 + -0.2249035573802175E-01 + -0.2243699844072408E-01 + -0.2238368257653812E-01 + -0.2233040813292031E-01 + -0.2227717509738156E-01 + -0.2222398345749407E-01 + -0.2217083320083035E-01 + -0.2211772431534369E-01 + -0.2206465678943929E-01 + -0.2201163061152431E-01 + -0.2195864576963144E-01 + -0.2190570225131890E-01 + -0.2185280004411249E-01 + -0.2179993913614103E-01 + -0.2174711951637663E-01 + -0.2169434117383605E-01 + -0.2164160409733082E-01 + -0.2158890827537101E-01 + -0.2153625369643005E-01 + -0.2148364034912957E-01 + -0.2143106822234249E-01 + -0.2137853730495344E-01 + -0.2132604758604080E-01 + -0.2127359905503783E-01 + -0.2122119170140099E-01 + -0.2116882551456645E-01 + -0.2111650048394617E-01 + -0.2106421659893653E-01 + -0.2101197384904302E-01 + -0.2095977222401650E-01 + -0.2090761171362644E-01 + -0.2085549230770841E-01 + -0.2080341399626798E-01 + -0.2075137676932225E-01 + -0.2069938061696725E-01 + -0.2064742552951795E-01 + -0.2059551149731082E-01 + -0.2054363851071666E-01 + -0.2049180656022523E-01 + -0.2044001563633437E-01 + -0.2038826572969720E-01 + -0.2033655683145776E-01 + -0.2028488893284004E-01 + -0.2023326202498197E-01 + -0.2018167609877326E-01 + -0.2013013114504211E-01 + -0.2007862715472286E-01 + -0.2002716411916622E-01 + -0.1997574202980518E-01 + -0.1992436087817702E-01 + -0.1987302065626767E-01 + -0.1982172135616301E-01 + -0.1977046296985860E-01 + -0.1971924548900747E-01 + -0.1966806890516075E-01 + -0.1961693321003667E-01 + -0.1956583839619134E-01 + -0.1951478445641834E-01 + -0.1946377138340477E-01 + -0.1941279916934293E-01 + -0.1936186780625658E-01 + -0.1931097728634504E-01 + -0.1926012760286564E-01 + -0.1920931874944047E-01 + -0.1915855071958235E-01 + -0.1910782350618647E-01 + -0.1905713710190188E-01 + -0.1900649149946871E-01 + -0.1895588669233305E-01 + -0.1890532267422999E-01 + -0.1885479943891174E-01 + -0.1880431698033362E-01 + -0.1875387529253756E-01 + -0.1870347436951341E-01 + -0.1865311420490336E-01 + -0.1860279479216976E-01 + -0.1855251612488065E-01 + -0.1850227819769805E-01 + -0.1845208100587242E-01 + -0.1840192454459634E-01 + -0.1835180880851331E-01 + -0.1830173379193803E-01 + -0.1825169948921043E-01 + -0.1820170589513520E-01 + -0.1815175300481069E-01 + -0.1810184081335148E-01 + -0.1805196931616040E-01 + -0.1800213850883686E-01 + -0.1795234838697214E-01 + -0.1790259894612887E-01 + -0.1785289018184584E-01 + -0.1780322208966835E-01 + -0.1775359466542868E-01 + -0.1770400790519132E-01 + -0.1765446180503584E-01 + -0.1760495636138820E-01 + -0.1755549157097935E-01 + -0.1750606743053015E-01 + -0.1745668393653599E-01 + -0.1740734108527542E-01 + -0.1735803887302763E-01 + -0.1730877729655499E-01 + -0.1725955635312271E-01 + -0.1721037604001194E-01 + -0.1716123635456487E-01 + -0.1711213729419412E-01 + -0.1706307885630948E-01 + -0.1701406103842852E-01 + -0.1696508383820198E-01 + -0.1691614725328624E-01 + -0.1686725128161845E-01 + -0.1681839592151029E-01 + -0.1676958117128843E-01 + -0.1672080702920591E-01 + -0.1667207349341484E-01 + -0.1662338056205560E-01 + -0.1657472823360064E-01 + -0.1652611650704433E-01 + -0.1647754538141934E-01 + -0.1642901485588666E-01 + -0.1638052492983123E-01 + -0.1633207560264907E-01 + -0.1628366687354879E-01 + -0.1623529874140241E-01 + -0.1618697120504132E-01 + -0.1613868426383383E-01 + -0.1609043791823012E-01 + -0.1604223216879971E-01 + -0.1599406701592022E-01 + -0.1594594245956233E-01 + -0.1589785849963629E-01 + -0.1584981513624874E-01 + -0.1580181236998479E-01 + -0.1575385020149147E-01 + -0.1570592863154053E-01 + -0.1565804766123920E-01 + -0.1561020729174131E-01 + -0.1556240752420580E-01 + -0.1551464835982356E-01 + -0.1546692979978382E-01 + -0.1541925184552250E-01 + -0.1537161449925504E-01 + -0.1532401776334031E-01 + -0.1527646163995398E-01 + -0.1522894613067054E-01 + -0.1518147123693104E-01 + -0.1513403696041832E-01 + -0.1508664330373412E-01 + -0.1503929026968723E-01 + -0.1499197786112197E-01 + -0.1494470608104920E-01 + -0.1489747493251685E-01 + -0.1485028441864307E-01 + -0.1480313454288634E-01 + -0.1475602530879429E-01 + -0.1470895671985626E-01 + -0.1466192877930544E-01 + -0.1461494149029154E-01 + -0.1456799485619815E-01 + -0.1452108888169682E-01 + -0.1447422357188533E-01 + -0.1442739893168128E-01 + -0.1438061496497241E-01 + -0.1433387167526567E-01 + -0.1428716906629210E-01 + -0.1424050714327798E-01 + -0.1419388591204236E-01 + -0.1414730537832485E-01 + -0.1410076554732479E-01 + -0.1405426642400272E-01 + -0.1400780801339323E-01 + -0.1396139032116786E-01 + -0.1391501335329719E-01 + -0.1386867711579460E-01 + -0.1382238161508060E-01 + -0.1377612685778285E-01 + -0.1372991285047805E-01 + -0.1368373959928044E-01 + -0.1363760711004229E-01 + -0.1359151538873563E-01 + -0.1354546444271449E-01 + -0.1349945428017304E-01 + -0.1345348490922741E-01 + -0.1340755633696639E-01 + -0.1336166856979656E-01 + -0.1331582161422249E-01 + -0.1327001547830610E-01 + -0.1322425017122637E-01 + -0.1317852570212665E-01 + -0.1313284207930443E-01 + -0.1308719931039747E-01 + -0.1304159740306521E-01 + -0.1299603636572070E-01 + -0.1295051620741222E-01 + -0.1290503693722085E-01 + -0.1285959856456385E-01 + -0.1281420109916542E-01 + -0.1276884455075253E-01 + -0.1272352892894423E-01 + -0.1267825424325295E-01 + -0.1263302050320305E-01 + -0.1258782771885619E-01 + -0.1254267590085078E-01 + -0.1249756505984296E-01 + -0.1245249520626506E-01 + -0.1240746635029008E-01 + -0.1236247850209393E-01 + -0.1231753167261270E-01 + -0.1227262587374147E-01 + -0.1222776111742623E-01 + -0.1218293741529910E-01 + -0.1213815477856423E-01 + -0.1209341321840105E-01 + -0.1204871274647469E-01 + -0.1200405337517227E-01 + -0.1195943511693950E-01 + -0.1191485798444416E-01 + -0.1187032199071199E-01 + -0.1182582714879584E-01 + -0.1178137347147873E-01 + -0.1173696097107514E-01 + -0.1169258965985672E-01 + -0.1164825955089744E-01 + -0.1160397065879545E-01 + -0.1155972299831523E-01 + -0.1151551658383300E-01 + -0.1147135142892565E-01 + -0.1142722754707114E-01 + -0.1138314495220322E-01 + -0.1133910365928458E-01 + -0.1129510368341651E-01 + -0.1125114503963152E-01 + -0.1120722774279546E-01 + -0.1116335180774838E-01 + -0.1111951724966575E-01 + -0.1107572408462519E-01 + -0.1103197232885264E-01 + -0.1098826199850171E-01 + -0.1094459310951556E-01 + -0.1090096567779815E-01 + -0.1085737971943400E-01 + -0.1081383525108950E-01 + -0.1077033228954635E-01 + -0.1072687085173491E-01 + -0.1068345095510895E-01 + -0.1064007261723688E-01 + -0.1059673585567946E-01 + -0.1055344068797016E-01 + -0.1051018713163575E-01 + -0.1046697520441893E-01 + -0.1042380492497556E-01 + -0.1038067631220234E-01 + -0.1033758938493209E-01 + -0.1029454416170237E-01 + -0.1025154066096512E-01 + -0.1020857890135573E-01 + -0.1016565890244042E-01 + -0.1012278068408034E-01 + -0.1007994426611526E-01 + -0.1003714966826223E-01 + -0.9994396910196432E-02 + -0.9951686011735699E-02 + -0.9909016993570468E-02 + -0.9866389876721959E-02 + -0.9823804682195780E-02 + -0.9781261430879857E-02 + -0.9738760143614273E-02 + -0.9696300841358664E-02 + -0.9653883545955944E-02 + -0.9611508279647508E-02 + -0.9569175064647929E-02 + -0.9526883922923641E-02 + -0.9484634876319825E-02 + -0.9442427946763704E-02 + -0.9400263156923137E-02 + -0.9358140529862491E-02 + -0.9316060088683651E-02 + -0.9274021856813084E-02 + -0.9232025857866429E-02 + -0.9190072115496093E-02 + -0.9148160653714600E-02 + -0.9106291496762903E-02 + -0.9064464668887544E-02 + -0.9022680194332221E-02 + -0.8980938097339175E-02 + -0.8939238402208529E-02 + -0.8897581134024200E-02 + -0.8855966318452534E-02 + -0.8814393981187275E-02 + -0.8772864148093586E-02 + -0.8731376845175387E-02 + -0.8689932098452772E-02 + -0.8648529934109142E-02 + -0.8607170378470441E-02 + -0.8565853457881653E-02 + -0.8524579198909134E-02 + -0.8483347628328691E-02 + -0.8442158772966277E-02 + -0.8401012660571553E-02 + -0.8359909319837982E-02 + -0.8318848779487455E-02 + -0.8277831067716972E-02 + -0.8236856212142182E-02 + -0.8195924240375005E-02 + -0.8155035180776340E-02 + -0.8114189062605217E-02 + -0.8073385915182380E-02 + -0.8032625767977352E-02 + -0.7991908650652039E-02 + -0.7951234592893709E-02 + -0.7910603624758505E-02 + -0.7870015776820374E-02 + -0.7829471079697519E-02 + -0.7788969564010086E-02 + -0.7748511260378253E-02 + -0.7708096199432800E-02 + -0.7667724412209616E-02 + -0.7627395930414272E-02 + -0.7587110785822721E-02 + -0.7546869010391173E-02 + -0.7506670636396135E-02 + -0.7466515696155653E-02 + -0.7426404222246750E-02 + -0.7386336247749188E-02 + -0.7346311805807606E-02 + -0.7306330929654282E-02 + -0.7266393652700486E-02 + -0.7226500008387813E-02 + -0.7186650030469018E-02 + -0.7146843753412767E-02 + -0.7107081211795751E-02 + -0.7067362440280951E-02 + -0.7027687473738968E-02 + -0.6988056347079747E-02 + -0.6948469095378213E-02 + -0.6908925754155146E-02 + -0.6869426359014596E-02 + -0.6829970945794962E-02 + -0.6790559551029971E-02 + -0.6751192211391501E-02 + -0.6711868963600725E-02 + -0.6672589844522303E-02 + -0.6633354891057417E-02 + -0.6594164140330156E-02 + -0.6555017630252937E-02 + -0.6515915398924554E-02 + -0.6476857484480387E-02 + -0.6437843925173851E-02 + -0.6398874759294953E-02 + -0.6359950025326278E-02 + -0.6321069762562885E-02 + -0.6282234010529244E-02 + -0.6243442808768900E-02 + -0.6204696196879457E-02 + -0.6165994214481636E-02 + -0.6127336901400947E-02 + -0.6088724298500774E-02 + -0.6050156446991784E-02 + -0.6011633388068822E-02 + -0.5973155162783671E-02 + -0.5934721812143613E-02 + -0.5896333377308465E-02 + -0.5857989900354883E-02 + -0.5819691423725793E-02 + -0.5781437989938715E-02 + -0.5743229641963501E-02 + -0.5705066422969864E-02 + -0.5666948376129477E-02 + -0.5628875544545969E-02 + -0.5590847971297405E-02 + -0.5552865699605060E-02 + -0.5514928773831667E-02 + -0.5477037238925234E-02 + -0.5439191139841769E-02 + -0.5401390521467841E-02 + -0.5363635428657304E-02 + -0.5325925906372618E-02 + -0.5288262000613443E-02 + -0.5250643758006579E-02 + -0.5213071225163394E-02 + -0.5175544448274941E-02 + -0.5138063473263116E-02 + -0.5100628346154329E-02 + -0.5063239114265388E-02 + -0.5025895825828464E-02 + -0.4988598529097273E-02 + -0.4951347272176092E-02 + -0.4914142103057522E-02 + -0.4876983069773849E-02 + -0.4839870220864222E-02 + -0.4802803605291288E-02 + -0.4765783272075353E-02 + -0.4728809270854756E-02 + -0.4691881651825304E-02 + -0.4655000465222515E-02 + -0.4618165761422256E-02 + -0.4581377590937813E-02 + -0.4544636004320722E-02 + -0.4507941052611233E-02 + -0.4471292787364556E-02 + -0.4434691260184811E-02 + -0.4398136522984862E-02 + -0.4361628628028657E-02 + -0.4325167627624013E-02 + -0.4288753574447665E-02 + -0.4252386521630425E-02 + -0.4216066522352985E-02 + -0.4179793630098994E-02 + -0.4143567898753692E-02 + -0.4107389382251929E-02 + -0.4071258134862126E-02 + -0.4035174211331887E-02 + -0.3999137666466339E-02 + -0.3963148555374953E-02 + -0.3927206933639034E-02 + -0.3891312856899909E-02 + -0.3855466381061785E-02 + -0.3819667562468184E-02 + -0.3783916457523839E-02 + -0.3748213122925375E-02 + -0.3712557615899327E-02 + -0.3676949993747660E-02 + -0.3641390314032908E-02 + -0.3605878634828650E-02 + -0.3570415014287278E-02 + -0.3534999510794564E-02 + -0.3499632183230816E-02 + -0.3464313090559045E-02 + -0.3429042291963973E-02 + -0.3393819847139241E-02 + -0.3358645815869925E-02 + -0.3323520258174150E-02 + -0.3288443234653444E-02 + -0.3253414806020088E-02 + -0.3218435033176833E-02 + -0.3183503977538471E-02 + -0.3148621700627460E-02 + -0.3113788264157117E-02 + -0.3079003730400482E-02 + -0.3044268161756247E-02 + -0.3009581620793209E-02 + -0.2974944170617430E-02 + -0.2940355874466512E-02 + -0.2905816795751661E-02 + -0.2871326998484428E-02 + -0.2836886546833575E-02 + -0.2802495505109212E-02 + -0.2768153938142203E-02 + -0.2733861910913851E-02 + -0.2699619488548267E-02 + -0.2665426736745075E-02 + -0.2631283721382346E-02 + -0.2597190508469316E-02 + -0.2563147164583048E-02 + -0.2529153756492060E-02 + -0.2495210351079749E-02 + -0.2461317015759792E-02 + -0.2427473818140860E-02 + -0.2393680825949741E-02 + -0.2359938107512050E-02 + -0.2326245731390149E-02 + -0.2292603766246572E-02 + -0.2259012281278075E-02 + -0.2225471345912049E-02 + -0.2191981029663185E-02 + -0.2158541402536216E-02 + -0.2125152534765671E-02 + -0.2091814496684588E-02 + -0.2058527359247012E-02 + -0.2025291193718912E-02 + -0.1992106071442471E-02 + -0.1958972064236725E-02 + -0.1925889244182157E-02 + -0.1892857683432389E-02 + -0.1859877454630530E-02 + -0.1826948630709672E-02 + -0.1794071284680484E-02 + -0.1761245490132791E-02 + -0.1728471321025021E-02 + -0.1695748851379378E-02 + -0.1663078155661899E-02 + -0.1630459308645660E-02 + -0.1597892385166228E-02 + -0.1565377460528616E-02 + -0.1532914610387264E-02 + -0.1500503910458698E-02 + -0.1468145436940942E-02 + -0.1435839266418447E-02 + -0.1403585475537743E-02 + -0.1371384141438439E-02 + -0.1339235341686780E-02 + -0.1307139153904275E-02 + -0.1275095656064597E-02 + -0.1243104926470199E-02 + -0.1211167043482174E-02 + -0.1179282085963116E-02 + -0.1147450133280533E-02 + -0.1115671264861982E-02 + -0.1083945560490296E-02 + -0.1052273100332682E-02 + -0.1020653964613980E-02 + -0.9890882339709293E-03 + -0.9575759895220315E-03 + -0.9261173124488257E-03 + -0.8947122843039221E-03 + -0.8633609871075665E-03 + -0.8320635029435625E-03 + -0.8008199142357015E-03 + -0.7696303038687868E-03 + -0.7384947547941577E-03 + -0.7074133503268795E-03 + -0.6763861743157017E-03 + -0.6454133106836013E-03 + -0.6144948436376973E-03 + -0.5836308578309125E-03 + -0.5528214379874470E-03 + -0.5220666691759051E-03 + -0.4913666370538774E-03 + -0.4607214273680466E-03 + -0.4301311261259019E-03 + -0.3995958198109022E-03 + -0.3691155949890232E-03 + -0.3386905385044150E-03 + -0.3083207377531276E-03 + -0.2780062802284744E-03 + -0.2477472536758934E-03 + -0.2175437463793580E-03 + -0.1873958467248281E-03 + -0.1573036433373729E-03 + -0.1272672253927397E-03 + -0.9728668217795613E-04 + -0.6736210319939902E-04 + -0.3749357850883230E-04 + -0.7681198276173769E-05 + 0.2207494712103016E-04 + 0.5177476674859904E-04 + 0.8141816954288952E-04 + 0.1110050642479147E-03 + 0.1405353590507922E-03 + 0.1700089619997424E-03 + 0.1994257809655868E-03 + 0.2287857232690134E-03 + 0.2580886960823547E-03 + 0.2873346064128468E-03 + 0.3165233607152818E-03 + 0.3456548652844353E-03 + 0.3747290262613613E-03 + 0.4037457492348375E-03 + 0.4327049396211446E-03 + 0.4616065026990230E-03 + 0.4904503432231082E-03 + 0.5192363657697103E-03 + 0.5479644747747657E-03 + 0.5766345740875253E-03 + 0.6052465673451561E-03 + 0.6338003580792080E-03 + 0.6622958493818569E-03 + 0.6907329441680670E-03 + 0.7191115452274675E-03 + 0.7474315547474150E-03 + 0.7756928746620915E-03 + 0.8038954068114785E-03 + 0.8320390525952004E-03 + 0.8601237132072914E-03 + 0.8881492897376708E-03 + 0.9161156827203543E-03 + 0.9440227924154554E-03 + 0.9718705190015143E-03 + 0.9996587622459540E-03 + 0.1027387421693077E-02 + 0.1055056396799450E-02 + 0.1082665586516224E-02 + 0.1110214889503560E-02 + 0.1137704204340747E-02 + 0.1165133429133824E-02 + 0.1192502461694679E-02 + 0.1219811199769803E-02 + 0.1247059540772999E-02 + 0.1274247381891601E-02 + 0.1301374620232699E-02 + 0.1328441152341923E-02 + 0.1355446874363317E-02 + 0.1382391682381108E-02 + 0.1409275472220383E-02 + 0.1436098139501539E-02 + 0.1462859579776318E-02 + 0.1489559688109650E-02 + 0.1516198359161920E-02 + 0.1542775487530562E-02 + 0.1569290967502325E-02 + 0.1595744693084694E-02 + 0.1622136558224430E-02 + 0.1648466456520214E-02 + 0.1674734281234987E-02 + 0.1700939925568967E-02 + 0.1727083282369417E-02 + 0.1753164244118256E-02 + 0.1779182703235249E-02 + 0.1805138551860236E-02 + 0.1831031681822453E-02 + 0.1856861984890161E-02 + 0.1882629352526269E-02 + 0.1908333675829832E-02 + 0.1933974845834767E-02 + 0.1959552753277270E-02 + 0.1985067288511994E-02 + 0.2010518341827801E-02 + 0.2035905803319022E-02 + 0.2061229562818305E-02 + 0.2086489510097333E-02 + 0.2111685534631869E-02 + 0.2136817525458849E-02 + 0.2161885371538663E-02 + 0.2186888961627465E-02 + 0.2211828184163088E-02 + 0.2236702927515258E-02 + 0.2261513079868561E-02 + 0.2286258529101658E-02 + 0.2310939163023140E-02 + 0.2335554869222494E-02 + 0.2360105534891377E-02 + 0.2384591047138188E-02 + 0.2409011292924439E-02 + 0.2433366158940149E-02 + 0.2457655531803693E-02 + 0.2481879297943578E-02 + 0.2506037343393086E-02 + 0.2530129554093239E-02 + 0.2554155815861098E-02 + 0.2578116014258198E-02 + 0.2602010034770700E-02 + 0.2625837762748172E-02 + 0.2649599083228900E-02 + 0.2673293881162616E-02 + 0.2696922041368660E-02 + 0.2720483448349761E-02 + 0.2743977986514194E-02 + 0.2767405540166172E-02 + 0.2790765993356226E-02 + 0.2814059230048426E-02 + 0.2837285134094718E-02 + 0.2860443589043070E-02 + 0.2883534478339008E-02 + 0.2906557685354094E-02 + 0.2929513093287433E-02 + 0.2952400585263082E-02 + 0.2975220044305117E-02 + 0.2997971353135929E-02 + 0.3020654394363723E-02 + 0.3043269050523455E-02 + 0.3065815203955172E-02 + 0.3088292736910091E-02 + 0.3110701531578908E-02 + 0.3133041470010489E-02 + 0.3155312434178312E-02 + 0.3177514305978870E-02 + 0.3199646967061676E-02 + 0.3221710298959140E-02 + 0.3243704183155587E-02 + 0.3265628501056766E-02 + 0.3287483134011581E-02 + 0.3309267963300234E-02 + 0.3330982869972016E-02 + 0.3352627734951730E-02 + 0.3374202439128777E-02 + 0.3395706863408139E-02 + 0.3417140888679802E-02 + 0.3438504395771744E-02 + 0.3459797265295750E-02 + 0.3481019377731456E-02 + 0.3502170613521285E-02 + 0.3523250853124646E-02 + 0.3544259976991781E-02 + 0.3565197865524772E-02 + 0.3586064399017330E-02 + 0.3606859457680640E-02 + 0.3627582921689459E-02 + 0.3648234671256519E-02 + 0.3668814586605235E-02 + 0.3689322547911966E-02 + 0.3709758435234650E-02 + 0.3730122128533920E-02 + 0.3750413507737574E-02 + 0.3770632452893718E-02 + 0.3790778844135032E-02 + 0.3810852561554241E-02 + 0.3830853485187988E-02 + 0.3850781495018845E-02 + 0.3870636470992351E-02 + 0.3890418293123372E-02 + 0.3910126841486630E-02 + 0.3929761996122304E-02 + 0.3949323637117461E-02 + 0.3968811644605098E-02 + 0.3988225898685096E-02 + 0.4007566279553368E-02 + 0.4026832667512060E-02 + 0.4046024942831342E-02 + 0.4065142985826653E-02 + 0.4084186676873012E-02 + 0.4103155896313621E-02 + 0.4122050524612478E-02 + 0.4140870442396778E-02 + 0.4159615530268416E-02 + 0.4178285668935251E-02 + 0.4196880739265469E-02 + 0.4215400622102683E-02 + 0.4233845198384939E-02 + 0.4252214349210179E-02 + 0.4270507955654114E-02 + 0.4288725898940793E-02 + 0.4306868060558196E-02 + 0.4324934321982548E-02 + 0.4342924564817205E-02 + 0.4360838670918258E-02 + 0.4378676522131697E-02 + 0.4396438000407528E-02 + 0.4414122987930465E-02 + 0.4431731366876651E-02 + 0.4449263019608313E-02 + 0.4466717828915789E-02 + 0.4484095677607620E-02 + 0.4501396448602729E-02 + 0.4518620025119176E-02 + 0.4535766290381631E-02 + 0.4552835127753591E-02 + 0.4569826420997732E-02 + 0.4586740053903176E-02 + 0.4603575910423430E-02 + 0.4620333875018885E-02 + 0.4637013832201247E-02 + 0.4653615666599764E-02 + 0.4670139263265017E-02 + 0.4686584507292247E-02 + 0.4702951283922186E-02 + 0.4719239478948438E-02 + 0.4735448978244266E-02 + 0.4751579667814017E-02 + 0.4767631434220421E-02 + 0.4783604164118585E-02 + 0.4799497744300685E-02 + 0.4815312062195337E-02 + 0.4831047005355537E-02 + 0.4846702461400321E-02 + 0.4862278318350156E-02 + 0.4877774464303625E-02 + 0.4893190787618325E-02 + 0.4908527177986935E-02 + 0.4923783525462217E-02 + 0.4938959720028564E-02 + 0.4954055651473215E-02 + 0.4969071209495721E-02 + 0.4984006283991106E-02 + 0.4998860766112897E-02 + 0.5013634547427071E-02 + 0.5028327519617370E-02 + 0.5042939575270536E-02 + 0.5057470607293332E-02 + 0.5071920508625017E-02 + 0.5086289172622951E-02 + 0.5100576492796737E-02 + 0.5114782362797747E-02 + 0.5128906677552310E-02 + 0.5142949332542780E-02 + 0.5156910223259415E-02 + 0.5170789245479944E-02 + 0.5184586295105921E-02 + 0.5198301268153383E-02 + 0.5211934061943811E-02 + 0.5225484574480653E-02 + 0.5238952703815107E-02 + 0.5252338348713098E-02 + 0.5265641408341907E-02 + 0.5278861781960109E-02 + 0.5291999370126787E-02 + 0.5305054074209395E-02 + 0.5318025795563629E-02 + 0.5330914435594094E-02 + 0.5343719895729021E-02 + 0.5356442077501606E-02 + 0.5369080884326742E-02 + 0.5381636221008296E-02 + 0.5394107992378270E-02 + 0.5406496103627008E-02 + 0.5418800460227447E-02 + 0.5431020967690277E-02 + 0.5443157532556000E-02 + 0.5455210062259303E-02 + 0.5467178464300943E-02 + 0.5479062647474223E-02 + 0.5490862521792053E-02 + 0.5502577997309393E-02 + 0.5514208984544550E-02 + 0.5525755394490584E-02 + 0.5537217138181481E-02 + 0.5548594127875898E-02 + 0.5559886277193098E-02 + 0.5571093499822547E-02 + 0.5582215710202705E-02 + 0.5593252823676926E-02 + 0.5604204755649516E-02 + 0.5615071422697494E-02 + 0.5625852742932068E-02 + 0.5636548634558521E-02 + 0.5647159016375847E-02 + 0.5657683808030837E-02 + 0.5668122929229784E-02 + 0.5678476300613447E-02 + 0.5688743844265979E-02 + 0.5698925482388888E-02 + 0.5709021138257743E-02 + 0.5719030736948287E-02 + 0.5728954203695290E-02 + 0.5738791464405964E-02 + 0.5748542446218615E-02 + 0.5758207076389645E-02 + 0.5767785282916476E-02 + 0.5777276995270940E-02 + 0.5786682143085759E-02 + 0.5796000656888562E-02 + 0.5805232469141764E-02 + 0.5814377512544654E-02 + 0.5823435720367741E-02 + 0.5832407027235275E-02 + 0.5841291367953000E-02 + 0.5850088678394555E-02 + 0.5858798897173504E-02 + 0.5867421963321005E-02 + 0.5875957816100161E-02 + 0.5884406395443000E-02 + 0.5892767641386191E-02 + 0.5901041494898798E-02 + 0.5909227899809803E-02 + 0.5917326800479943E-02 + 0.5925338141832565E-02 + 0.5933261870688819E-02 + 0.5941097934255694E-02 + 0.5948846280149210E-02 + 0.5956506857502729E-02 + 0.5964079615787985E-02 + 0.5971564505311444E-02 + 0.5978961479741627E-02 + 0.5986270493581158E-02 + 0.5993491501480451E-02 + 0.6000624458760666E-02 + 0.6007669320921821E-02 + 0.6014626044265816E-02 + 0.6021494588971565E-02 + 0.6028274916377968E-02 + 0.6034966987976715E-02 + 0.6041570766080464E-02 + 0.6048086213269224E-02 + 0.6054513292705821E-02 + 0.6060851970943116E-02 + 0.6067102215750636E-02 + 0.6073263995161139E-02 + 0.6079337278879007E-02 + 0.6085322037264447E-02 + 0.6091218241113879E-02 + 0.6097025864271916E-02 + 0.6102744881889165E-02 + 0.6108375269357658E-02 + 0.6113917003884604E-02 + 0.6119370063525910E-02 + 0.6124734426632275E-02 + 0.6130010074010459E-02 + 0.6135196987717182E-02 + 0.6140295150123744E-02 + 0.6145304546449313E-02 + 0.6150225163489335E-02 + 0.6155056988221602E-02 + 0.6159800009303920E-02 + 0.6164454216405848E-02 + 0.6169019599479021E-02 + 0.6173496151544704E-02 + 0.6177883867628208E-02 + 0.6182182742954878E-02 + 0.6186392774806887E-02 + 0.6190513961924291E-02 + 0.6194546303219951E-02 + 0.6198489799548459E-02 + 0.6202344453256280E-02 + 0.6206110266917500E-02 + 0.6209787246078077E-02 + 0.6213375398756384E-02 + 0.6216874733163551E-02 + 0.6220285259474911E-02 + 0.6223606989636249E-02 + 0.6226839935753863E-02 + 0.6229984111703266E-02 + 0.6233039533086399E-02 + 0.6236006215714039E-02 + 0.6238884178418696E-02 + 0.6241673443225127E-02 + 0.6244374032376282E-02 + 0.6246985969433045E-02 + 0.6249509279461941E-02 + 0.6251943987703118E-02 + 0.6254290121820391E-02 + 0.6256547712478763E-02 + 0.6258716790600704E-02 + 0.6260797389056103E-02 + 0.6262789543324749E-02 + 0.6264693289130806E-02 + 0.6266508663974102E-02 + 0.6268235707931291E-02 + 0.6269874461340685E-02 + 0.6271424966457272E-02 + 0.6272887268551908E-02 + 0.6274261413213607E-02 + 0.6275547447785903E-02 + 0.6276745422604480E-02 + 0.6277855388347257E-02 + 0.6278877397366811E-02 + 0.6279811505113914E-02 + 0.6280657767422543E-02 + 0.6281416241684326E-02 + 0.6282086988418241E-02 + 0.6282670068564649E-02 + 0.6283165544576313E-02 + 0.6283573482205764E-02 + 0.6283893947688883E-02 + 0.6284127008787048E-02 + 0.6284272736884155E-02 + 0.6284331203939603E-02 + 0.6284302483143361E-02 + 0.6284186650854812E-02 + 0.6283983783989106E-02 + 0.6283693960726591E-02 + 0.6283317262802889E-02 + 0.6282853772630059E-02 + 0.6282303573962127E-02 + 0.6281666754675199E-02 + 0.6280943403496357E-02 + 0.6280133610082670E-02 + 0.6279237467173211E-02 + 0.6278255068213072E-02 + 0.6277186507733214E-02 + 0.6276031884221213E-02 + 0.6274791297142334E-02 + 0.6273464846907918E-02 + 0.6272052637674550E-02 + 0.6270554774612418E-02 + 0.6268971363760768E-02 + 0.6267302514901579E-02 + 0.6265548338923265E-02 + 0.6263708947551430E-02 + 0.6261784456442715E-02 + 0.6259774982520292E-02 + 0.6257680643454822E-02 + 0.6255501560722263E-02 + 0.6253237857137482E-02 + 0.6250889656113906E-02 + 0.6248457084327819E-02 + 0.6245940269712524E-02 + 0.6243339340961680E-02 + 0.6240654431405154E-02 + 0.6237885676298999E-02 + 0.6235033211368325E-02 + 0.6232097175272382E-02 + 0.6229077708011475E-02 + 0.6225974950142751E-02 + 0.6222789046146572E-02 + 0.6219520142436595E-02 + 0.6216168385955724E-02 + 0.6212733927658254E-02 + 0.6209216920643243E-02 + 0.6205617518397689E-02 + 0.6201935877366490E-02 + 0.6198172155718646E-02 + 0.6194326512079544E-02 + 0.6190399109083639E-02 + 0.6186390111884393E-02 + 0.6182299685987083E-02 + 0.6178127999834613E-02 + 0.6173875223876115E-02 + 0.6169541528950076E-02 + 0.6165127089682195E-02 + 0.6160632083488436E-02 + 0.6156056688104346E-02 + 0.6151401083993868E-02 + 0.6146665453800538E-02 + 0.6141849980523400E-02 + 0.6136954850922813E-02 + 0.6131980255000609E-02 + 0.6126926383067116E-02 + 0.6121793427796670E-02 + 0.6116581584068619E-02 + 0.6111291047086319E-02 + 0.6105922015587772E-02 + 0.6100474691871129E-02 + 0.6094949278565728E-02 + 0.6089345980548457E-02 + 0.6083665005139897E-02 + 0.6077906559972862E-02 + 0.6072070855708565E-02 + 0.6066158106570595E-02 + 0.6060168527148628E-02 + 0.6054102334477602E-02 + 0.6047959748696615E-02 + 0.6041740990298211E-02 + 0.6035446282175623E-02 + 0.6029075850515885E-02 + 0.6022629921892274E-02 + 0.6016108725323073E-02 + 0.6009512493456242E-02 + 0.6002841459370627E-02 + 0.5996095858195717E-02 + 0.5989275928344363E-02 + 0.5982381908658873E-02 + 0.5975414040072686E-02 + 0.5968372567146719E-02 + 0.5961257734935906E-02 + 0.5954069790498499E-02 + 0.5946808984654675E-02 + 0.5939475568769364E-02 + 0.5932069795859438E-02 + 0.5924591922284287E-02 + 0.5917042204938927E-02 + 0.5909420902521316E-02 + 0.5901728277703318E-02 + 0.5893964593821779E-02 + 0.5886130115737767E-02 + 0.5878225111935389E-02 + 0.5870249851564958E-02 + 0.5862204605335819E-02 + 0.5854089647993654E-02 + 0.5845905255074636E-02 + 0.5837651703212079E-02 + 0.5829329272056809E-02 + 0.5820938241927403E-02 + 0.5812478894694783E-02 + 0.5803951517003267E-02 + 0.5795356396577239E-02 + 0.5786693821949771E-02 + 0.5777964084201357E-02 + 0.5769167475087666E-02 + 0.5760304287673115E-02 + 0.5751374819759027E-02 + 0.5742379370412966E-02 + 0.5733318239422963E-02 + 0.5724191729217216E-02 + 0.5715000143036406E-02 + 0.5705743785178629E-02 + 0.5696422964407240E-02 + 0.5687037990902221E-02 + 0.5677589175509638E-02 + 0.5668076831923608E-02 + 0.5658501274855304E-02 + 0.5648862819798952E-02 + 0.5639161786016884E-02 + 0.5629398494196627E-02 + 0.5619573265629477E-02 + 0.5609686424596174E-02 + 0.5599738296621880E-02 + 0.5589729207880215E-02 + 0.5579659488111329E-02 + 0.5569529468644162E-02 + 0.5559339481275374E-02 + 0.5549089860313390E-02 + 0.5538780941301863E-02 + 0.5528413060377786E-02 + 0.5517986557473980E-02 + 0.5507501774497403E-02 + 0.5496959053738673E-02 + 0.5486358739636311E-02 + 0.5475701177867707E-02 + 0.5464986714565107E-02 + 0.5454215698980097E-02 + 0.5443388482271557E-02 + 0.5432505415982559E-02 + 0.5421566854143146E-02 + 0.5410573152435962E-02 + 0.5399524666904332E-02 + 0.5388421756010622E-02 + 0.5377264779949906E-02 + 0.5366054099260432E-02 + 0.5354790076795401E-02 + 0.5343473077195283E-02 + 0.5332103465441898E-02 + 0.5320681608925324E-02 + 0.5309207877035780E-02 + 0.5297682639468917E-02 + 0.5286106267674246E-02 + 0.5274479134674848E-02 + 0.5262801613804094E-02 + 0.5251074080567413E-02 + 0.5239296912562745E-02 + 0.5227470487703063E-02 + 0.5215595185742266E-02 + 0.5203671388342491E-02 + 0.5191699477458219E-02 + 0.5179679836367221E-02 + 0.5167612849817095E-02 + 0.5155498902845263E-02 + 0.5143338382297181E-02 + 0.5131131677188000E-02 + 0.5118879176857691E-02 + 0.5106581272016241E-02 + 0.5094238355130752E-02 + 0.5081850818974518E-02 + 0.5069419057586961E-02 + 0.5056943466748587E-02 + 0.5044424442553330E-02 + 0.5031862382238590E-02 + 0.5019257684724400E-02 + 0.5006610749250916E-02 + 0.4993921976175187E-02 + 0.4981191767620119E-02 + 0.4968420526048087E-02 + 0.4955608654840280E-02 + 0.4942756558916738E-02 + 0.4929864643528314E-02 + 0.4916933314811575E-02 + 0.4903962980494060E-02 + 0.4890954048654821E-02 + 0.4877906928140775E-02 + 0.4864822029257379E-02 + 0.4851699762661382E-02 + 0.4838540539676862E-02 + 0.4825344772961982E-02 + 0.4812112875525299E-02 + 0.4798845260999146E-02 + 0.4785542344341016E-02 + 0.4772204540874339E-02 + 0.4758832266451440E-02 + 0.4745425938085771E-02 + 0.4731985973146434E-02 + 0.4718512789463508E-02 + 0.4705006805909010E-02 + 0.4691468441704671E-02 + 0.4677898116501689E-02 + 0.4664296250965768E-02 + 0.4650663266123067E-02 + 0.4636999583341726E-02 + 0.4623305624757647E-02 + 0.4609581812827197E-02 + 0.4595828570336770E-02 + 0.4582046320847005E-02 + 0.4568235488253919E-02 + 0.4554396496723398E-02 + 0.4540529770982710E-02 + 0.4526635736049760E-02 + 0.4512714817181912E-02 + 0.4498767440084524E-02 + 0.4484794030729147E-02 + 0.4470795015308307E-02 + 0.4456770820388360E-02 + 0.4442721872784595E-02 + 0.4428648599499856E-02 + 0.4414551427730352E-02 + 0.4400430784861179E-02 + 0.4386287098452863E-02 + 0.4372120796182304E-02 + 0.4357932305884594E-02 + 0.4343722055549803E-02 + 0.4329490473131337E-02 + 0.4315237986671590E-02 + 0.4300965024352037E-02 + 0.4286672014172538E-02 + 0.4272359384144382E-02 + 0.4258027562420607E-02 + 0.4243676976965166E-02 + 0.4229308055733916E-02 + 0.4214921226808205E-02 + 0.4200516917887934E-02 + 0.4186095556539840E-02 + 0.4171657570450477E-02 + 0.4157203386825486E-02 + 0.4142733432648771E-02 + 0.4128248135023758E-02 + 0.4113747920523618E-02 + 0.4099233215432339E-02 + 0.4084704446148562E-02 + 0.4070162038431862E-02 + 0.4055606417633938E-02 + 0.4041038009218437E-02 + 0.4026457237939376E-02 + 0.4011864528038050E-02 + 0.3997260303864922E-02 + 0.3982644989000735E-02 + 0.3968019006404103E-02 + 0.3953382779137340E-02 + 0.3938736729400740E-02 + 0.3924081278620737E-02 + 0.3909416848321791E-02 + 0.3894743859125875E-02 + 0.3880062730761480E-02 + 0.3865373883049885E-02 + 0.3850677734907247E-02 + 0.3835974704263968E-02 + 0.3821265209133538E-02 + 0.3806549666520219E-02 + 0.3791828492224382E-02 + 0.3777102102115386E-02 + 0.3762370911106046E-02 + 0.3747635332856182E-02 + 0.3732895781082252E-02 + 0.3718152668418840E-02 + 0.3703406405956167E-02 + 0.3688657404815059E-02 + 0.3673906075179552E-02 + 0.3659152825759462E-02 + 0.3644398065286154E-02 + 0.3629642201377971E-02 + 0.3614885639755721E-02 + 0.3600128786112356E-02 + 0.3585372045187825E-02 + 0.3570615819926577E-02 + 0.3555860513235229E-02 + 0.3541106526969918E-02 + 0.3526354260835715E-02 + 0.3511604114440447E-02 + 0.3496856486446331E-02 + 0.3482111773378456E-02 + 0.3467370371639380E-02 + 0.3452632676661700E-02 + 0.3437899081482446E-02 + 0.3423169978951341E-02 + 0.3408445760976400E-02 + 0.3393726816909841E-02 + 0.3379013535856491E-02 + 0.3364306306076654E-02 + 0.3349605513288087E-02 + 0.3334911542921597E-02 + 0.3320224779534287E-02 + 0.3305545604806946E-02 + 0.3290874400027002E-02 + 0.3276211545707972E-02 + 0.3261557419524909E-02 + 0.3246912398711613E-02 + 0.3232276859732076E-02 + 0.3217651175944889E-02 + 0.3203035720149167E-02 + 0.3188430864480321E-02 + 0.3173836978069822E-02 + 0.3159254429443297E-02 + 0.3144683586449851E-02 + 0.3130124813581678E-02 + 0.3115578474557053E-02 + 0.3101044932511963E-02 + 0.3086524547331500E-02 + 0.3072017678066867E-02 + 0.3057524683230029E-02 + 0.3043045917979328E-02 + 0.3028581736511503E-02 + 0.3014132492509750E-02 + 0.2999698536116074E-02 + 0.2985280216339799E-02 + 0.2970877881765762E-02 + 0.2956491877634771E-02 + 0.2942122548009513E-02 + 0.2927770236530220E-02 + 0.2913435283176995E-02 + 0.2899118026498509E-02 + 0.2884818804692975E-02 + 0.2870537952479747E-02 + 0.2856275803084956E-02 + 0.2842032689423034E-02 + 0.2827808940909794E-02 + 0.2813604885311611E-02 + 0.2799420850103425E-02 + 0.2785257159116471E-02 + 0.2771114134296550E-02 + 0.2756992097350193E-02 + 0.2742891366539099E-02 + 0.2728812258178552E-02 + 0.2714755088362239E-02 + 0.2700720169630525E-02 + 0.2686707812329008E-02 + 0.2672718326616361E-02 + 0.2658752019264104E-02 + 0.2644809194764125E-02 + 0.2630890157435247E-02 + 0.2616995208152970E-02 + 0.2603124645267140E-02 + 0.2589278766971663E-02 + 0.2575457868125724E-02 + 0.2561662240927118E-02 + 0.2547892177429594E-02 + 0.2534147966438416E-02 + 0.2520429893939800E-02 + 0.2506738245779543E-02 + 0.2493073304611357E-02 + 0.2479435350077530E-02 + 0.2465824661679522E-02 + 0.2452241515849167E-02 + 0.2438686185872155E-02 + 0.2425158944885260E-02 + 0.2411660062993773E-02 + 0.2398189806927506E-02 + 0.2384748443255110E-02 + 0.2371336235746738E-02 + 0.2357953444786948E-02 + 0.2344600330582851E-02 + 0.2331277150469277E-02 + 0.2317984158006848E-02 + 0.2304721606542127E-02 + 0.2291489746850800E-02 + 0.2278288826034284E-02 + 0.2265119090962897E-02 + 0.2251980785946389E-02 + 0.2238874151317044E-02 + 0.2225799427124668E-02 + 0.2212756851011761E-02 + 0.2199746656551164E-02 + 0.2186769076991356E-02 + 0.2173824343345045E-02 + 0.2160912682507489E-02 + 0.2148034321004250E-02 + 0.2135189483172542E-02 + 0.2122378388959390E-02 + 0.2109601257865891E-02 + 0.2096858307428635E-02 + 0.2084149750879865E-02 + 0.2071475800962986E-02 + 0.2058836668517848E-02 + 0.2046232559831471E-02 + 0.2033663680608920E-02 + 0.2021130234818048E-02 + 0.2008632421880316E-02 + 0.1996170440568785E-02 + 0.1983744488054315E-02 + 0.1971354756913970E-02 + 0.1959001438994721E-02 + 0.1946684724626082E-02 + 0.1934404799369962E-02 + 0.1922161847944270E-02 + 0.1909956053732776E-02 + 0.1897787595510625E-02 + 0.1885656651150409E-02 + 0.1873563397247416E-02 + 0.1861508005554665E-02 + 0.1849490646773095E-02 + 0.1837511490487282E-02 + 0.1825570701619714E-02 + 0.1813668443975626E-02 + 0.1801804880322153E-02 + 0.1789980168661296E-02 + 0.1778194465733615E-02 + 0.1766447927340215E-02 + 0.1754740704535424E-02 + 0.1743072946989117E-02 + 0.1731444803554134E-02 + 0.1719856418529240E-02 + 0.1708307934753201E-02 + 0.1696799494292480E-02 + 0.1685331234482243E-02 + 0.1673903290990292E-02 + 0.1662515798830467E-02 + 0.1651168888587798E-02 + 0.1639862689138029E-02 + 0.1628597328752455E-02 + 0.1617372931196914E-02 + 0.1606189618333332E-02 + 0.1595047511492784E-02 + 0.1583946727645972E-02 + 0.1572887381750552E-02 + 0.1561869588295343E-02 + 0.1550893457530975E-02 + 0.1539959097573532E-02 + 0.1529066616122883E-02 + 0.1518216116752293E-02 + 0.1507407700770551E-02 + 0.1496641469112322E-02 + 0.1485917518666400E-02 + 0.1475235943905115E-02 + 0.1464596838970990E-02 + 0.1454000294146785E-02 + 0.1443446397209239E-02 + 0.1432935235635253E-02 + 0.1422466893137325E-02 + 0.1412041450772865E-02 + 0.1401658989328314E-02 + 0.1391319586011619E-02 + 0.1381023315291386E-02 + 0.1370770251380789E-02 + 0.1360560464979757E-02 + 0.1350394023870599E-02 + 0.1340270995599608E-02 + 0.1330191444490598E-02 + 0.1320155431965824E-02 + 0.1310163019215377E-02 + 0.1300214264203162E-02 + 0.1290309221744062E-02 + 0.1280447946421569E-02 + 0.1270630489865644E-02 + 0.1260856900581816E-02 + 0.1251127226843758E-02 + 0.1241441514094998E-02 + 0.1231799804534549E-02 + 0.1222202140117169E-02 + 0.1212648560095549E-02 + 0.1203139100364961E-02 + 0.1193673796560173E-02 + 0.1184252681814245E-02 + 0.1174875785890562E-02 + 0.1165543138274844E-02 + 0.1156254766091443E-02 + 0.1147010693015057E-02 + 0.1137810942416100E-02 + 0.1128655535458124E-02 + 0.1119544489807139E-02 + 0.1110477822794928E-02 + 0.1101455549685962E-02 + 0.1092477682187988E-02 + 0.1083544231638610E-02 + 0.1074655207473891E-02 + 0.1065810615575971E-02 + 0.1057010461421788E-02 + 0.1048254748716157E-02 + 0.1039543477563473E-02 + 0.1030876647617724E-02 + 0.1022254256939262E-02 + 0.1013676300065577E-02 + 0.1005142771049290E-02 + 0.9966536624074704E-03 + 0.9882089629608037E-03 + 0.9798086609712520E-03 + 0.9714527433639658E-03 + 0.9631411935575617E-03 + 0.9548739943874283E-03 + 0.9466511274606514E-03 + 0.9384725708701907E-03 + 0.9303383020668694E-03 + 0.9222482973403489E-03 + 0.9142025293530192E-03 + 0.9062009700400926E-03 + 0.8982435903509678E-03 + 0.8903303578752054E-03 + 0.8824612394623156E-03 + 0.8746362010293101E-03 + 0.8668552050200384E-03 + 0.8591182130402721E-03 + 0.8514251858851807E-03 + 0.8437760810563324E-03 + 0.8361708551836635E-03 + 0.8286094641494444E-03 + 0.8210918605203055E-03 + 0.8136179959019591E-03 + 0.8061878212479718E-03 + 0.7988012843617762E-03 + 0.7914583320469003E-03 + 0.7841589105167635E-03 + 0.7769029628794854E-03 + 0.7696904311654834E-03 + 0.7625212568894312E-03 + 0.7553953786170588E-03 + 0.7483127337958910E-03 + 0.7412732594021088E-03 + 0.7342768894809597E-03 + 0.7273235568658669E-03 + 0.7204131939830914E-03 + 0.7135457305233530E-03 + 0.7067210949444968E-03 + 0.6999392153397588E-03 + 0.6932000171562449E-03 + 0.6865034245434815E-03 + 0.6798493613210821E-03 + 0.6732377487320417E-03 + 0.6666685066462468E-03 + 0.6601415546468738E-03 + 0.6536568099406539E-03 + 0.6472141883587335E-03 + 0.6408136054695701E-03 + 0.6344549745230124E-03 + 0.6281382073134666E-03 + 0.6218632154006412E-03 + 0.6156299081880894E-03 + 0.6094381936122466E-03 + 0.6032879793931265E-03 + 0.5971791711835484E-03 + 0.5911116731132177E-03 + 0.5850853891130105E-03 + 0.5791002211959039E-03 + 0.5731560698453631E-03 + 0.5672528353577074E-03 + 0.5613904162135498E-03 + 0.5555687093273633E-03 + 0.5497876114339558E-03 + 0.5440470175547567E-03 + 0.5383468211133829E-03 + 0.5326869153613293E-03 + 0.5270671920139968E-03 + 0.5214875412387881E-03 + 0.5159478530328562E-03 + 0.5104480158965976E-03 + 0.5049879167004962E-03 + 0.4995674421422160E-03 + 0.4941864775726598E-03 + 0.4888449067587689E-03 + 0.4835426132938887E-03 + 0.4782794795193706E-03 + 0.4730553861862211E-03 + 0.4678702138662560E-03 + 0.4627238419832966E-03 + 0.4576161483864548E-03 + 0.4525470107390481E-03 + 0.4475163056492121E-03 + 0.4425239081619403E-03 + 0.4375696931277319E-03 + 0.4326535344374964E-03 + 0.4277753044473238E-03 + 0.4229348753097257E-03 + 0.4181321183042360E-03 + 0.4133669032028803E-03 + 0.4086390995634886E-03 + 0.4039485761511158E-03 + 0.3992952002527673E-03 + 0.3946788389296705E-03 + 0.3900993585327370E-03 + 0.3855566239840618E-03 + 0.3810504999696271E-03 + 0.3765808505307526E-03 + 0.3721475383089228E-03 + 0.3677504256959330E-03 + 0.3633893745128025E-03 + 0.3590642452454293E-03 + 0.3547748981208818E-03 + 0.3505211928518524E-03 + 0.3463029878540322E-03 + 0.3421201412709238E-03 + 0.3379725107908398E-03 + 0.3338599528680688E-03 + 0.3297823236754435E-03 + 0.3257394789805062E-03 + 0.3217312733709572E-03 + 0.3177575611423404E-03 + 0.3138181962349367E-03 + 0.3099130314832754E-03 + 0.3060419194238170E-03 + 0.3022047122750621E-03 + 0.2984012611982686E-03 + 0.2946314170455340E-03 + 0.2908950303918820E-03 + 0.2871919508373011E-03 + 0.2835220276709185E-03 + 0.2798851099354405E-03 + 0.2762810457575250E-03 + 0.2727096829465203E-03 + 0.2691708690945082E-03 + 0.2656644509480374E-03 + 0.2621902749350596E-03 + 0.2587481872932702E-03 + 0.2553380334950920E-03 + 0.2519596586987685E-03 + 0.2486129078911325E-03 + 0.2452976253454335E-03 + 0.2420136550176149E-03 + 0.2387608407132541E-03 + 0.2355390256080772E-03 + 0.2323480525728478E-03 + 0.2291877643426737E-03 + 0.2260580030814898E-03 + 0.2229586106537091E-03 + 0.2198894288023945E-03 + 0.2168502987719692E-03 + 0.2138410615229737E-03 + 0.2108615579052068E-03 + 0.2079116283281610E-03 + 0.2049911129301779E-03 + 0.2020998517478709E-03 + 0.1992376844360214E-03 + 0.1964044503952545E-03 + 0.1935999889329940E-03 + 0.1908241390439846E-03 + 0.1880767394972667E-03 + 0.1853576289738828E-03 + 0.1826666458843526E-03 + 0.1800036284295594E-03 + 0.1773684147282579E-03 + 0.1747608426947494E-03 + 0.1721807500717883E-03 + 0.1696279745234076E-03 + 0.1671023535439361E-03 + 0.1646037244760308E-03 + 0.1621319245874888E-03 + 0.1596867910341853E-03 + 0.1572681608647973E-03 + 0.1548758710558440E-03 + 0.1525097585009132E-03 + 0.1501696600111486E-03 + 0.1478554123286970E-03 + 0.1455668521691622E-03 + 0.1433038162234132E-03 + 0.1410661411160080E-03 + 0.1388536634536722E-03 + 0.1366662198319717E-03 + 0.1345036467827663E-03 + 0.1323657808810388E-03 + 0.1302524587700681E-03 + 0.1281635170341349E-03 + 0.1260987922966153E-03 + 0.1240581212554135E-03 + 0.1220413405516332E-03 + 0.1200482869159482E-03 + 0.1180787972382503E-03 + 0.1161327083589890E-03 + 0.1142098572101499E-03 + 0.1123100809053711E-03 + 0.1104332165127857E-03 + 0.1085791012124885E-03 + 0.1067475724222312E-03 + 0.1049384675220248E-03 + 0.1031516240233629E-03 + 0.1013868797377776E-03 + 0.9964407244877240E-04 + 0.9792304007166351E-04 + 0.9622362085465332E-04 + 0.9454565302600543E-04 + 0.9288897496102187E-04 + 0.9125342543646342E-04 + 0.8963884322307845E-04 + 0.8804506723445371E-04 + 0.8647193681752457E-04 + 0.8491929132423921E-04 + 0.8338697026020338E-04 + 0.8187481363778908E-04 + 0.8038266149354140E-04 + 0.7891035400861406E-04 + 0.7745773189791447E-04 + 0.7602463591456431E-04 + 0.7461090695681896E-04 + 0.7321638651397521E-04 + 0.7184091613523737E-04 + 0.7048433751305505E-04 + 0.6914649298610200E-04 + 0.6782722497731736E-04 + 0.6652637604220919E-04 + 0.6524378940999926E-04 + 0.6397930841550707E-04 + 0.6273277652054778E-04 + 0.6150403790792193E-04 + 0.6029293689498241E-04 + 0.5909931791997617E-04 + 0.5792302618913604E-04 + 0.5676390707602414E-04 + 0.5562180606309531E-04 + 0.5449656942075388E-04 + 0.5338804361543039E-04 + 0.5229607521567804E-04 + 0.5122051162226361E-04 + 0.5016120047182129E-04 + 0.4911798949230971E-04 + 0.4809072726490562E-04 + 0.4707926264273556E-04 + 0.4608344456120638E-04 + 0.4510312283697492E-04 + 0.4413814760111601E-04 + 0.4318836905708483E-04 + 0.4225363830764676E-04 + 0.4133380681250380E-04 + 0.4042872609484629E-04 + 0.3953824859674240E-04 + 0.3866222716439990E-04 + 0.3780051469857543E-04 + 0.3695296503069354E-04 + 0.3611943244393520E-04 + 0.3529977126789833E-04 + 0.3449383677255058E-04 + 0.3370148473015456E-04 + 0.3292257095208572E-04 + 0.3215695219644413E-04 + 0.3140448577638782E-04 + 0.3066502903767216E-04 + 0.2993844027373334E-04 + 0.2922457838654125E-04 + 0.2852330230540231E-04 + 0.2783447190697875E-04 + 0.2715794773306186E-04 + 0.2649359034861329E-04 + 0.2584126125972762E-04 + 0.2520082269390505E-04 + 0.2457213689904892E-04 + 0.2395506705576028E-04 + 0.2334947712430551E-04 + 0.2275523108414197E-04 + 0.2217219383619979E-04 + 0.2160023112074014E-04 + 0.2103920869755288E-04 + 0.2048899323182868E-04 + 0.1994945228678212E-04 + 0.1942045344727515E-04 + 0.1890186518637173E-04 + 0.1839355693608033E-04 + 0.1789539815405177E-04 + 0.1740725916449871E-04 + 0.1692901130983411E-04 + 0.1646052596403358E-04 + 0.1600167534442293E-04 + 0.1555233274675740E-04 + 0.1511237150642062E-04 + 0.1468166577610208E-04 + 0.1426009084618248E-04 + 0.1384752205689332E-04 + 0.1344383553763668E-04 + 0.1304890861407540E-04 + 0.1266261867424994E-04 + 0.1228484386479847E-04 + 0.1191546358533382E-04 + 0.1155435731270707E-04 + 0.1120140525131133E-04 + 0.1085648891582029E-04 + 0.1051948991566385E-04 + 0.1019029055327944E-04 + 0.9868774493339766E-05 + 0.9554825515015278E-05 + 0.9248328057009751E-05 + 0.8949167974395321E-05 + 0.8657231259612118E-05 + 0.8372404528294425E-05 + 0.8094575860115027E-05 + 0.7823633497246161E-05 + 0.7559466269520677E-05 + 0.7301964518884791E-05 + 0.7051018778171865E-05 + 0.6806520130888143E-05 + 0.6568361214803002E-05 + 0.6336434889456442E-05 + 0.6110634528738754E-05 + 0.5890855101237214E-05 + 0.5676991831460358E-05 + 0.5468940422149816E-05 + 0.5266598207106642E-05 + 0.5069862813252940E-05 + 0.4878632309795090E-05 + 0.4692806427649746E-05 + 0.4512285230879625E-05 + 0.4336969191303180E-05 + 0.4166760470108263E-05 + 0.4001561605218151E-05 + 0.3841275508731540E-05 + 0.3685806803569594E-05 + 0.3535060536006223E-05 + 0.3388942094466768E-05 + 0.3247358595016099E-05 + 0.3110217627089953E-05 + 0.2977427091701269E-05 + 0.2848896628943738E-05 + 0.2724536405326772E-05 + 0.2604256869991272E-05 + 0.2487970217666720E-05 + 0.2375589225487592E-05 + 0.2267026925978288E-05 + 0.2162198098807792E-05 + 0.2061018164749313E-05 + 0.1963402774518282E-05 + 0.1869269322630797E-05 + 0.1778535905882420E-05 + 0.1691120827490881E-05 + 0.1606944126612708E-05 + 0.1525926608224311E-05 + 0.1447989262187500E-05 + 0.1373054801822088E-05 + 0.1301046771845005E-05 + 0.1231888882397338E-05 + 0.1165506550140212E-05 + 0.1101826090499468E-05 + 0.1040773967062665E-05 + 0.9822783290357712E-06 + 0.9262682934819965E-06 + 0.8726731105890393E-06 + 0.8214236909135163E-06 + 0.7724519831089044E-06 + 0.7256900562793431E-06 + 0.6810716111075211E-06 + 0.6385314578704627E-06 + 0.5980045170314866E-06 + 0.5594273080752490E-06 + 0.5227375322926219E-06 + 0.4878729933915269E-06 + 0.4547730581092504E-06 + 0.4233783477096875E-06 + 0.3936295806814716E-06 + 0.3654689994317000E-06 + 0.3388401739134279E-06 + 0.3136867687580108E-06 + 0.2899539303978829E-06 + 0.2675882057370278E-06 + 0.2465362365301186E-06 + 0.2267461014911623E-06 + 0.2081673523692926E-06 + 0.1907496387276023E-06 + 0.1744439997904973E-06 + 0.1592030197279007E-06 + 0.1449793863476343E-06 + 0.1317271275900410E-06 + 0.1194018872474469E-06 + 0.1079594215013650E-06 + 0.9735677519104824E-07 + 0.8755267860503096E-07 + 0.7850598616773037E-07 + 0.7017678780440193E-07 + 0.6252692683362453E-07 + 0.5551838551689528E-07 + 0.4911432706644491E-07 + 0.4327973404787223E-07 + 0.3797974590253153E-07 + 0.3318062737396679E-07 + 0.2885052619843402E-07 + 0.2495776811046801E-07 + 0.2147174762871426E-07 + 0.1836380311037364E-07 + 0.1560547527623844E-07 + 0.1316931682751561E-07 + 0.1102988251723872E-07 + 0.9161957182473689E-08 + 0.7541279863135831E-08 + 0.6145644835346486E-08 + 0.4953107366060153E-08 + 0.3942621984609693E-08 + 0.3095253948281184E-08 + 0.2392364655166265E-08 + 0.1816150844916149E-08 + 0.1350948165392568E-08 + 0.9814236077234250E-09 + 0.6930490220707231E-09 + 0.4735462341696056E-09 + 0.3110216131821627E-09 + 0.1942443415207571E-09 + 0.1140098248269579E-09 + 0.6149467627260140E-10 + 0.2878519640380937E-10 + 0.1100577288676853E-10 + 0.3911141293701808E-11 + 0.3086913914425243E-11 + 0.3506003599488745E-11 diff --git a/comd-cl/pots/Cu_u6.eam b/comd-cl/pots/Cu_u6.eam new file mode 100644 index 0000000..278c84d --- /dev/null +++ b/comd-cl/pots/Cu_u6.eam @@ -0,0 +1,303 @@ +Cu functions (universal 4) - JB Adams et al J. Mater. Res., 4(1), 102 (1989) + 29 63.550 3.6150 FCC + 500 5.0100200400801306e-04 500 1.0000000000000009e-02 4.9499999999999886e+00 + 0. -3.1589719908208558e-01 -5.2405175291223927e-01 -6.9885553834123115e-01 -8.5420409172727574e-01 + -9.9627285782417374e-01 -1.1284756487892835e+00 -1.2529454148045645e+00 -1.3711252149943363e+00 -1.4840478277127076e+00 + -1.5924840805403662e+00 -1.6954285804552853e+00 -1.7942937845174001e+00 -1.8901318213864968e+00 -1.9832501645057476e+00 + -2.0739063371790252e+00 -2.1623187777983759e+00 -2.2486748239473968e+00 -2.3331367007241965e+00 -2.4158460932269890e+00 + -2.4969276936450484e+00 -2.5764919917168783e+00 -2.6546374977553171e+00 -2.7314525337618534e+00 -2.8070166913917660e+00 + -2.8814020298474361e+00 -2.9546740684873072e+00 -3.0268926157701515e+00 -3.0981124665488835e+00 -3.1683839923973949e+00 + -3.2377536446699082e+00 -3.3062643854300688e+00 -3.3739560586949437e+00 -3.4408657118035535e+00 -3.5070278749074930e+00 + -3.5724748051301987e+00 -3.6372367006631805e+00 -3.7013418893374563e+00 -3.7648169952241943e+00 -3.8276870863304424e+00 + -3.8899758061050136e+00 -3.9517054906525857e+00 -4.0128972737054482e+00 -4.0735711808432313e+00 -4.1324020819066334e+00 + -4.1903921077370399e+00 -4.2479051536742531e+00 -4.3049572584920952e+00 -4.3615637243846948e+00 -4.4177391662932166e+00 + -4.4734975570518145e+00 -4.5288522686579995e+00 -4.5838161101054880e+00 -4.6384013621277234e+00 -4.6926198091528875e+00 + -4.7464827687459206e+00 -4.8000011187718314e+00 -4.8531853225280486e+00 -4.9060454519053280e+00 -4.9585912090057604e+00 + -5.0108319460781274e+00 -5.0627766840981678e+00 -5.1144341300432075e+00 -5.1658126929883963e+00 -5.2169204991179470e+00 + -5.2677654057399081e+00 -5.3183550143895957e+00 -5.3686966830900360e+00 -5.4187975378393958e+00 -5.4686644833797118e+00 + -5.5183042133078573e+00 -5.5677232195759814e+00 -5.6169278014231168e+00 -5.6659240737851633e+00 -5.7147179752168427e+00 + -5.7633152753617765e+00 -5.8117215820040258e+00 -5.8599423477251662e+00 -5.9079828761981332e+00 -5.9558483281427925e+00 + -6.0035437269616239e+00 -6.0510739641062798e+00 -6.0984438040355258e+00 -6.1456578891786364e+00 -6.1927207443901580e+00 + -6.2396367812953599e+00 -6.2864103024253382e+00 -6.3330455051271599e+00 -6.3795464852936732e+00 -6.4259172409138614e+00 + -6.4721616754587501e+00 -6.5182836011053098e+00 -6.5642867418169999e+00 -6.6101747362826870e+00 -6.6559511407215268e+00 + -6.7016194315664848e+00 -6.7471830080289408e+00 -6.7926321787266488e+00 -6.8376565597087335e+00 -6.8825828851093718e+00 + -6.9274142262937062e+00 -6.9721535889762833e+00 -7.0168039151812138e+00 -7.0613680851242009e+00 -7.1058489190182854e+00 + -7.1502491788078260e+00 -7.1945715698338404e+00 -7.2388187424386103e+00 -7.2829932935017325e+00 -7.3270977679243288e+00 + -7.3711346600521210e+00 -7.4151064150498769e+00 -7.4590154302223652e+00 -7.5028640562861142e+00 -7.5466545985988489e+00 + -7.5903893183397599e+00 -7.6340704336532212e+00 -7.6777001207475166e+00 -7.7212805149568453e+00 -7.7648137117691078e+00 + -7.8083017678126225e+00 -7.8517467018166371e+00 -7.8951504955327323e+00 -7.9385150946301337e+00 -7.9818424095582259e+00 + -8.0251343163853335e+00 -8.0683926576019758e+00 -8.1116192429086027e+00 -8.1548158499697934e+00 -8.1979842251487867e+00 + -8.2411260842174556e+00 -8.2842431130446244e+00 -8.3273369682627845e+00 -8.3704092779143480e+00 -8.4134616420805628e+00 + -8.4564956334858721e+00 -8.4995127980902225e+00 -8.5425146556591471e+00 -8.5855027003218538e+00 -8.6284784011075430e+00 + -8.6714432024708685e+00 -8.7143985247980709e+00 -8.7573457649043576e+00 -8.8002862965079203e+00 -8.8432214707042931e+00 + -8.8861526164113798e+00 -8.9290810408153902e+00 -8.9720080297988716e+00 -9.0149348483554377e+00 -9.0578627409975070e+00 + -9.1007929321486927e+00 -9.1437266265307358e+00 -9.1866650095359432e+00 -9.2296092475897353e+00 -9.2725604885091570e+00 + -9.3155198618426311e+00 -9.3584884792123262e+00 -9.4014674346366292e+00 -9.4444578048540961e+00 -9.4874606496305205e+00 + -9.5304770120671378e+00 -9.5735079188909253e+00 -9.6165543807549625e+00 -9.6596173924971254e+00 -9.7026979334374914e+00 + -9.7457969676344760e+00 -9.7889154441094774e+00 -9.8320542972711564e+00 -9.8749024758928954e+00 -9.9176676449848173e+00 + -9.9604518241702067e+00 -1.0003255855809869e+01 -1.0046080568707225e+01 -1.0088926778514065e+01 -1.0131795287896693e+01 + -1.0174686886752681e+01 -1.0217602352416293e+01 -1.0260542449857894e+01 -1.0303507931886486e+01 -1.0346499539340471e+01 + -1.0389518001277565e+01 -1.0432564035159942e+01 -1.0475638347037830e+01 -1.0518741631724708e+01 -1.0561874572971817e+01 + -1.0605037843637035e+01 -1.0648232105854731e+01 -1.0691458011195323e+01 -1.0734716200826654e+01 -1.0778007305671338e+01 + -1.0821331946557279e+01 -1.0864690734371720e+01 -1.0908084270204256e+01 -1.0951513145493493e+01 -1.0994977942169044e+01 + -1.1038479232788461e+01 -1.1082017580672300e+01 -1.1125593540039802e+01 -1.1169207656138724e+01 -1.1212860465371193e+01 + -1.1256552495422056e+01 -1.1300284265381379e+01 -1.1344056285864497e+01 -1.1387869059131503e+01 -1.1431723079201220e+01 + -1.1475618831971758e+01 -1.1519556795323240e+01 -1.1563537439236882e+01 -1.1607561225897086e+01 -1.1651628609799957e+01 + -1.1695740037856638e+01 -1.1739895949496542e+01 -1.1784096776765693e+01 -1.1828342944444898e+01 -1.1872634870038326e+01 + -1.1916972964140655e+01 -1.1961357630185660e+01 -1.2005789264757027e+01 -1.2050268257623998e+01 -1.2094794991829531e+01 + -1.2139369843773920e+01 -1.2183993183309894e+01 -1.2228665373815033e+01 -1.2273386772283743e+01 -1.2318157729378811e+01 + -1.2362978589648264e+01 -1.2407849691329261e+01 -1.2452771366701370e+01 -1.2497743942026659e+01 -1.2542767737650308e+01 + -1.2587843068072686e+01 -1.2632970242029501e+01 -1.2678149562554552e+01 -1.2723381327055449e+01 -1.2768665827383359e+01 + -1.2814003349896723e+01 -1.2859394175532202e+01 -1.2904838579871580e+01 -1.2950336833201561e+01 -1.2995889200586475e+01 + -1.3041495941923358e+01 -1.3087157312007946e+01 -1.3132873560597147e+01 -1.3178644932465090e+01 -1.3224471667467185e+01 + -1.3270354000597138e+01 -1.3316292162042373e+01 -1.3362286377246335e+01 -1.3408336866957768e+01 -1.3454443847292225e+01 + -1.3500607529781746e+01 -1.3546828121432384e+01 -1.3593105824775080e+01 -1.3639440837916936e+01 -1.3685833354596070e+01 + -1.3732283564231011e+01 -1.3778791651965662e+01 -1.3825357798727850e+01 -1.3871982181271051e+01 -1.3918664972226225e+01 + -1.3965406340150423e+01 -1.4012206449566122e+01 -1.4059065461010562e+01 -1.4105983531084178e+01 -1.4152960812497383e+01 + -1.4199997454109450e+01 -1.4247093600900882e+01 -1.4294249394311976e+01 -1.4341464971842868e+01 -1.4388740467389482e+01 + -1.4436076011212833e+01 -1.4483471729977452e+01 -1.4530927746798284e+01 -1.4578444181270356e+01 -1.4626021149517328e+01 + -1.4673658764226502e+01 -1.4721357134688901e+01 -1.4769116366835874e+01 -1.4816936563275590e+01 -1.4864817823335784e+01 + -1.4912760243093658e+01 -1.4960763915414873e+01 -1.5008828929991182e+01 -1.5056955373373171e+01 -1.5105143329006637e+01 + -1.5153392877265333e+01 -1.5201704095489163e+01 -1.5250077058012721e+01 -1.5298511836202465e+01 -1.5347008498487980e+01 + -1.5395567110395177e+01 -1.5444187734579373e+01 -1.5492870430854509e+01 -1.5541615256228738e+01 -1.5590422264928975e+01 + -1.5639291508440465e+01 -1.5688223035530768e+01 -1.5737216892280117e+01 -1.5786273122116540e+01 -1.5835391765839859e+01 + -1.5884572861650554e+01 -1.5933816445184789e+01 -1.5983122549535665e+01 -1.6032491205288238e+01 -1.6081922440538847e+01 + -1.6131416280932740e+01 -1.6180972749683292e+01 -1.6230591867602584e+01 -1.6280273653129598e+01 -1.6330018122352271e+01 + -1.6379825289037512e+01 -1.6429695164657005e+01 -1.6479627758410516e+01 -1.6529623077253063e+01 -1.6579681125920047e+01 + -1.6629801906948160e+01 -1.6679985420709272e+01 -1.6730231665424185e+01 -1.6780540637196850e+01 -1.6830912330026536e+01 + -1.6881346735842499e+01 -1.6931843844523655e+01 -1.6982403643917451e+01 -1.7033026119869078e+01 -1.7083711256241486e+01 + -1.7134459034938232e+01 -1.7185269435924170e+01 -1.7236142437252170e+01 -1.7287078015076759e+01 -1.7338076143685498e+01 + -1.7389136795514560e+01 -1.7440259941169757e+01 -1.7491445549452351e+01 -1.7542693587371559e+01 -1.7594004020176158e+01 + -1.7645376811364258e+01 -1.7696811922712527e+01 -1.7748309314288690e+01 -1.7799868944476657e+01 -1.7851490769996190e+01 + -1.7903174745917113e+01 -1.7954920825684781e+01 -1.8006728961136105e+01 -1.8058599102520361e+01 -1.8110531198513968e+01 + -1.8162525196246406e+01 -1.8214581041310112e+01 -1.8266698677789350e+01 -1.8318878048276588e+01 -1.8371119093861239e+01 + -1.8423421754189917e+01 -1.8475785967356501e+01 -1.8528211670354381e+01 -1.8580698798442995e+01 -1.8633247285599964e+01 + -1.8685857064432412e+01 -1.8738528066186518e+01 -1.8791260220768891e+01 -1.8844053456762026e+01 -1.8896907701446821e+01 + -1.8949822880805868e+01 -1.9002798919552447e+01 -1.9055835741138708e+01 -1.9108933267775342e+01 -1.9162091420446473e+01 + -1.9215310118921138e+01 -1.9268589281777849e+01 -1.9321928826411295e+01 -1.9375328669053715e+01 -1.9428788724780020e+01 + -1.9482308907539277e+01 -1.9535889130155283e+01 -1.9589529304345319e+01 -1.9643229340734365e+01 -1.9696989148876355e+01 + -1.9750808637254977e+01 -1.9804687713312433e+01 -1.9858626283450008e+01 -1.9912624253055810e+01 -1.9966681526506250e+01 + -2.0020798007185476e+01 -2.0074973597498911e+01 -2.0129208198888136e+01 -2.0183501711838630e+01 -2.0237854035899204e+01 + -2.0292265069692348e+01 -2.0346734710925716e+01 -2.0401262856409858e+01 -2.0455849402064473e+01 -2.0510494242935920e+01 + -2.0565197273209719e+01 -2.0619958386219423e+01 -2.0674777474463212e+01 -2.0729654429611969e+01 -2.0784589142526556e+01 + -2.0839581503263844e+01 -2.0894631401093307e+01 -2.0949738724508393e+01 -2.1004903361235051e+01 -2.1060125198247988e+01 + -2.1115404121775100e+01 -2.1170740017318053e+01 -2.1226132769657397e+01 -2.1281582262894972e+01 -2.1337088380382852e+01 + -2.1392651004661843e+01 -2.1448270018015251e+01 -2.1503945301662043e+01 -2.1559676736299366e+01 -2.1615464201984196e+01 + -2.1671307578140954e+01 -2.1727206743568217e+01 -2.1783161576455427e+01 -2.1839171954393919e+01 -2.1895237754379082e+01 + -2.1951358852829799e+01 -2.2007535125591289e+01 -2.2063766447950343e+01 -2.2120052694642595e+01 -2.2176393739860259e+01 + -2.2232789457272474e+01 -2.2289239719961643e+01 -2.2345744400729018e+01 -2.2402303371517178e+01 -2.2458916504038370e+01 + -2.2515583669430725e+01 -2.2572304738325670e+01 -2.2629079581086330e+01 -2.2685908067306855e+01 -2.2742790066346515e+01 + -2.2799725447076526e+01 -2.2856714077931429e+01 -2.2913755826927172e+01 -2.2970850561669295e+01 -2.3027998149359064e+01 + -2.3085198456800299e+01 -2.3142451350411534e+01 -2.3199756696229770e+01 -2.3257114359926845e+01 -2.3314524206806482e+01 + -2.3371986101824632e+01 -2.3429499909581864e+01 -2.3487065494349963e+01 -2.3544682720213359e+01 -2.3602351450489550e+01 + -2.3660071548650194e+01 -2.3717842877714475e+01 -2.3775665300345281e+01 -2.3833538678952209e+01 -2.3891462875653588e+01 + -2.3949437752298763e+01 -2.4007463170460369e+01 -2.4065538991453877e+01 -2.4123665076338057e+01 -2.4181841285923610e+01 + -2.4240067480782272e+01 -2.4298343521253173e+01 -2.4356669267446705e+01 -2.4415044579252253e+01 -2.4473469316351384e+01 + -2.4531943338216706e+01 -2.4590466504118467e+01 -2.4649038673143195e+01 -2.4707659704179378e+01 -2.4766329455946106e+01 + -2.4825047786983760e+01 -2.4883814555664912e+01 -2.4942629620207981e+01 -2.5001492838670174e+01 -2.5060404068966136e+01 + -2.5119363168864538e+01 -2.5178369996001948e+01 -2.5237424407882145e+01 -2.5296526261886129e+01 -2.5355675415276437e+01 + -2.5414871725205558e+01 -2.5474115048716612e+01 -2.5533405242759045e+01 -2.5592742164177480e+01 -2.5652125669732186e+01 + -2.5711555616102487e+01 -2.5771031859886762e+01 -2.5830554257610174e+01 -2.5890122665731269e+01 -2.5949736940650155e+01 + -2.6009396938703958e+01 -2.6069102516181829e+01 -2.6128853529326307e+01 -2.6188649834339685e+01 -2.6248491287389243e+01 + -2.6308377744605878e+01 -2.6368309062100934e+01 -2.6428285095962565e+01 -2.6488305702088610e+01 -2.6548370736885317e+01 + -2.6608480056235521e+01 -2.6668633516188947e+01 -2.6728830972768947e+01 -2.6789072282060033e+01 -2.6849357300140582e+01 + 1.0000000000000000e+01 1.0801250630455797e+01 1.0617301586939504e+01 1.0436833263885262e+01 1.0259774441010791e+01 + 1.0086055417347552e+01 9.9156079783837754e+00 9.7483653639170598e+00 9.5842622365983630e+00 9.4232346511569745e+00 + 9.2652200242883396e+00 9.1101571051919450e+00 8.9579859467472716e+00 8.8086478773091699e+00 8.6620854731154395e+00 + 8.5182425312888768e+00 8.3770640434238430e+00 8.2384961697429731e+00 8.1024862138128810e+00 7.9689825978078090e+00 + 7.8379348383064951e+00 7.7092935226140753e+00 7.5830102855955488e+00 7.4590377870116811e+00 7.3373296893445286e+00 + 7.2178406361032330e+00 7.1005262306008490e+00 6.9853430151894997e+00 6.8722484509459889e+00 6.7612008977976643e+00 + 6.6521595950793255e+00 6.5450846425111706e+00 6.4399369815891703e+00 6.3366783773799114e+00 6.2352714007088537e+00 + 6.1356794107365431e+00 6.0378665379119241e+00 5.9417976672963562e+00 5.8474384222482740e+00 5.7547551484639143e+00 + 5.6637148983634233e+00 5.5742854158160355e+00 5.4864351211977294e+00 5.4001330967728620e+00 5.3153490723937580e+00 + 5.2320534115112594e+00 5.1502170974889339e+00 5.0698117202151138e+00 4.9908094630057178e+00 4.9131830897922271e+00 + 4.8369059325884791e+00 4.7619518792290876e+00 4.6882953613761629e+00 4.6159113427851821e+00 4.5447753078280471e+00 + 4.4748632502644341e+00 4.4061516622586225e+00 4.3386175236344116e+00 4.2722382913651700e+00 4.2069918892916007e+00 + 4.1428566980642358e+00 4.0798115453044659e+00 4.0178356959802954e+00 3.9569088429914245e+00 3.8970110979596200e+00 + 3.8381229822198435e+00 3.7802254180071628e+00 3.7232997198366320e+00 3.6673275860703995e+00 3.6122910906684780e+00 + 3.5581726751199767e+00 3.5049551405497539e+00 3.4526216399971048e+00 3.4011556708634600e+00 3.3505410675235936e+00 + 3.3007619940993322e+00 3.2518029373895416e+00 3.2036486999552665e+00 3.1562843933552358e+00 3.1096954315288059e+00 + 3.0638675243237259e+00 3.0187866711643210e+00 2.9744391548584872e+00 2.9308115355394193e+00 2.8878906447394712e+00 + 2.8456635795935767e+00 2.8041176971686212e+00 2.7632406089169876e+00 2.7230201752508236e+00 2.6834445002347138e+00 + 2.6445019263941703e+00 2.6061810296373835e+00 2.5684706142875200e+00 2.5313597082236612e+00 2.4948375581276281e+00 + 2.4588936248343458e+00 2.4235175787838017e+00 2.3886992955719677e+00 2.3544288515990814e+00 2.3206965198123726e+00 + 2.2874927655419270e+00 2.2548082424273730e+00 2.2226337884330718e+00 2.1909604219504502e+00 2.1597793379851566e+00 + 2.1290819044273803e+00 2.0988596584032564e+00 2.0691043027062364e+00 2.0398077023055379e+00 2.0109618809312195e+00 + 1.9825590177335428e+00 1.9545914440145751e+00 1.9270516400317490e+00 1.8999322318704799e+00 1.8732259883849522e+00 + 1.8469258182056052e+00 1.8210247668116040e+00 1.7955160136671395e+00 1.7703928694199718e+00 1.7456487731607453e+00 + 1.7212772897420763e+00 1.6972721071559391e+00 1.6736270339679251e+00 1.6503359968072218e+00 1.6273930379113750e+00 + 1.6047923127241077e+00 1.5825280875452847e+00 1.5605947372321296e+00 1.5389867429502644e+00 1.5176986899731588e+00 + 1.4967252655299603e+00 1.4760612566992890e+00 1.4557015483494027e+00 1.4356411211222593e+00 1.4158750494618957e+00 + 1.3963984996850130e+00 1.3772067280935900e+00 1.3582950791282968e+00 1.3396589835618542e+00 1.3212939567312461e+00 + 1.3031955968085143e+00 1.2853595831085869e+00 1.2677816744339125e+00 1.2504577074545153e+00 1.2333835951233212e+00 + 1.2165553251254906e+00 1.1999689583611897e+00 1.1836206274610817e+00 1.1675065353339207e+00 1.1516229537450258e+00 + 1.1359662219258198e+00 1.1205327452130547e+00 1.1053189937170771e+00 1.0903215010191687e+00 1.0755368628964561e+00 + 1.0609617360743258e+00 1.0465928370056616e+00 1.0324269406761744e+00 1.0184608794353309e+00 1.0046915418523596e+00 + 9.9111587159659820e-01 9.7773086634202144e-01 9.6453357669496853e-01 9.5152110514480626e-01 9.3869060503712376e-01 + 9.2603927956864140e-01 9.1356438080370239e-01 9.0126320871155485e-01 8.8913311022427521e-01 8.7717147831462938e-01 + 8.6537575109353426e-01 8.5374341092675010e-01 8.4227198357020328e-01 8.3095903732382581e-01 8.1980218220310874e-01 + 8.0879906912829824e-01 7.9794738913080465e-01 7.8724487257618136e-01 7.7668928840378371e-01 7.6627844338220541e-01 + 7.5601018138057441e-01 7.4588238265517859e-01 7.3589296315095609e-01 7.2603987381787150e-01 7.1632109994155613e-01 + 7.0673466048788924e-01 6.9727860746149162e-01 6.8795102527759866e-01 6.7875003014695068e-01 6.6967376947370028e-01 + 6.6072042126578623e-01 6.5188819355765304e-01 6.4317532384495735e-01 6.3458007853101606e-01 6.2610075238490026e-01 + 6.1773566801053903e-01 6.0948317532703555e-01 6.0134165105970538e-01 5.9330949824153834e-01 5.8538514572508404e-01 + 5.7756704770434197e-01 5.6985368324655994e-01 5.6224355583360364e-01 5.5473519291279416e-01 5.4732714545698968e-01 + 5.4001798753364838e-01 5.3280631588273764e-01 5.2569074950327632e-01 5.1866992924830413e-01 5.1174251742814292e-01 + 5.0490719742172274e-01 4.9816267329578068e-01 4.9150766943189694e-01 4.8494093016099704e-01 4.7846121940521869e-01 + 4.7206732032718257e-01 4.6575803498626733e-01 4.5953218400168616e-01 4.5338860622255339e-01 4.4732615840449164e-01 + 4.4134371489266400e-01 4.3544016731128998e-01 4.2961442425926322e-01 4.2386541101190822e-01 4.1819206922867025e-01 + 4.1259335666658892e-01 4.0706824689955035e-01 4.0161572904300691e-01 3.9623480748423034e-01 3.9092450161784775e-01 + 3.8568384558664448e-01 3.8051188802739233e-01 3.7540769182181144e-01 3.7037033385227858e-01 3.6539890476236891e-01 + 3.6049250872219041e-01 3.5565026319808801e-01 3.5087129872705347e-01 3.4615475869537526e-01 3.4149979912160333e-01 + 3.3690558844382679e-01 3.3237130731094133e-01 3.2789614837797743e-01 3.2347931610542879e-01 3.1912002656234151e-01 + 3.1481750723327195e-01 3.1057099682888989e-01 3.0637974510021770e-01 3.0224301265637266e-01 2.9816007078585649e-01 + 2.9413020128113843e-01 2.9015269626666473e-01 2.8622685803004089e-01 2.8235199885637741e-01 2.7852744086590420e-01 + 2.7475251585446614e-01 2.7102656513704559e-01 2.6734893939429405e-01 2.6371899852185088e-01 2.6013611148246873e-01 + 2.5659965616091007e-01 2.5310901922152595e-01 2.4966359596849230e-01 2.4626279020852770e-01 2.4290601411627044e-01 + 2.3959268810202516e-01 2.3632224068197960e-01 2.3309410835077227e-01 2.2990773545640408e-01 2.2676257407740064e-01 + 2.2365808390219311e-01 2.2059373211072231e-01 2.1756899325815038e-01 2.1458334916067301e-01 2.1163628878335583e-01 + 2.0872730813005891e-01 2.0585591013519533e-01 2.0302160455757168e-01 2.0022390787598532e-01 1.9746234318676770e-01 + 1.9473644010305513e-01 1.9204573465593366e-01 1.8938976919722261e-01 1.8676809230404867e-01 1.8418025868501697e-01 + 1.8162582908807767e-01 1.7910437020998504e-01 1.7661545460728956e-01 1.7415866060892160e-01 1.7173357223026997e-01 + 1.6933977908869480e-01 1.6697687632057967e-01 1.6464446449973735e-01 1.6234214955720816e-01 1.6006954270248031e-01 + 1.5782626034600167e-01 1.5561192402300605e-01 1.5342616031865575e-01 1.5126860079441595e-01 1.4913888191569047e-01 + 1.4703664498065105e-01 1.4496153605028095e-01 1.4291320587954814e-01 1.4089130984976528e-01 1.3889550790202332e-01 + 1.3692546447178433e-01 1.3498084842450275e-01 1.3306133299233025e-01 1.3116659571184286e-01 1.2929631836281086e-01 + 1.2745018690792786e-01 1.2562789143357200e-01 1.2382912609148811e-01 1.2205358904140517e-01 1.2030098239464682e-01 + 1.1857101215854371e-01 1.1686338818183373e-01 1.1517782410088362e-01 1.1351403728677267e-01 1.1187174879324324e-01 + 1.1025068330544618e-01 1.0865056908951143e-01 1.0707113794291789e-01 1.0551212514563968e-01 1.0397326941204543e-01 + 1.0245431284357487e-01 1.0095500088214582e-01 9.9475082264262937e-02 9.8014308975870268e-02 9.6572436207889467e-02 + 9.5149222312433945e-02 9.3744428759716225e-02 9.2357820095600562e-02 9.0989163899807046e-02 8.9638230744780500e-02 + 8.8304794155128263e-02 8.6988630567732095e-02 8.5689519292436067e-02 8.4407242473327759e-02 8.3141585050604316e-02 + 8.1892334723027815e-02 8.0659281910912206e-02 7.9442219719687568e-02 7.8240943904000826e-02 7.7055252832346710e-02 + 7.5884947452225848e-02 7.4729831255814450e-02 7.3589710246154016e-02 7.2464392903814900e-02 7.1353690154065674e-02 + 7.0257415334517681e-02 6.9175384163253639e-02 6.8107414707390124e-02 6.7053327352138758e-02 6.6012944770277748e-02 + 6.4986091892085707e-02 6.3972595875702698e-02 6.2972286077917161e-02 6.1984994025379159e-02 6.1010553386208866e-02 + 6.0048799942037157e-02 5.9099571560412123e-02 5.8162708167624810e-02 5.7238051721903105e-02 5.6325446186999528e-02 + 5.5424737506136967e-02 5.4535773576326108e-02 5.3658404223060785e-02 5.2792481175329975e-02 5.1937858041017471e-02 + 5.1094390282629742e-02 5.0261935193351093e-02 4.9440351873451860e-02 4.8629501207008818e-02 4.7829245838954204e-02 + 4.7039450152438045e-02 4.6259980246510013e-02 4.5490703914087494e-02 4.4731490620259606e-02 4.3982211480854794e-02 + 4.3242739241325268e-02 4.2512948255901239e-02 4.1792714467042247e-02 4.1081915385161816e-02 4.0380430068628126e-02 + 3.9688139104032016e-02 3.9004924586723888e-02 3.8330670101623943e-02 3.7665260704261794e-02 3.7008582902100740e-02 + 3.6360524636098734e-02 3.5720975262514720e-02 3.5089825534961649e-02 3.4466967586696873e-02 3.3852294913154113e-02 + 3.3245702354694373e-02 3.2647086079598653e-02 3.2056343567280043e-02 3.1473373591718756e-02 3.0898076205114089e-02 + 3.0330352721755771e-02 2.9770105702100036e-02 2.9217238937061962e-02 2.8671657432515429e-02 2.8133267393987360e-02 + 2.7601976211552692e-02 2.7077692444942292e-02 2.6560325808820506e-02 2.6049787158272331e-02 2.5545988474477754e-02 + 2.5048842850559749e-02 2.4558264477628988e-02 2.4074168631003978e-02 2.3596471656606832e-02 2.3125090957536454e-02 + 2.2659944980823798e-02 2.2200953204335683e-02 2.1748036123873327e-02 2.1301115240412782e-02 2.0860113047532769e-02 + 2.0424953018977066e-02 1.9995559596398205e-02 1.9571858177249157e-02 1.9153775102828896e-02 1.8741237646474174e-02 + 1.8334174001923720e-02 1.7932513271801676e-02 1.7536185456265119e-02 1.7145121441799471e-02 1.6759252990136364e-02 + 1.6378512727332817e-02 1.6002834132978205e-02 1.5632151529535232e-02 1.5266400071822006e-02 1.4905515736628239e-02 + 1.4549435312452008e-02 1.4198096389378967e-02 1.3851437349077567e-02 1.3509397354926733e-02 1.3171916342264223e-02 + 1.2838935008766206e-02 1.2510394804928215e-02 1.2186237924689647e-02 1.1866407296154180e-02 1.1550846572444651e-02 + 1.1239500122655843e-02 1.0932313022929629e-02 1.0629231047647014e-02 1.0330200660712663e-02 1.0035169006965661e-02 + 9.7440839036889715e-03 9.4568938322237006e-03 9.1735479296908284e-03 8.8939959808188584e-03 8.6181884098633921e-03 + 8.3460762726380588e-03 8.0776112486364848e-03 7.8127456332576228e-03 7.5514323301215658e-03 7.2936248434884998e-03 + 7.0392772707632556e-03 6.7883442950981143e-03 6.5407811780883174e-03 6.2965437525517309e-03 6.0555884154033235e-03 + 5.8178721206175732e-03 5.5833523722726985e-03 5.3519872176873706e-03 5.1237352406410253e-03 4.8985555546731119e-03 + 4.6764077964680517e-03 4.4572521193242398e-03 4.2410491867018174e-03 4.0277601658472717e-03 3.8173467214993595e-03 + 3.6097710096757996e-03 3.4049956715283547e-03 3.2029838272795708e-03 3.0036990702375643e-03 2.8071054608720947e-03 + 2.6131675209760674e-03 2.4218502278956500e-03 2.2331190088270558e-03 2.0469397351849938e-03 1.8632787170468346e-03 + 1.6821026976564513e-03 1.5033788479984489e-03 1.3270747614446132e-03 1.1531584484569257e-03 9.8159833136179930e-04 + 8.1236323918953968e-04 6.4542240257081662e-04 4.8074544870146951e-04 3.1830239637042901e-04 1.5806365104042985e-04 + 0. 0. 0. 0. 0. + 0. 5.4383329664155645e-05 9.3944898415945083e-04 4.3251847212615047e-03 1.2334244035325348e-02 + 2.7137722173468548e-02 5.0697119791449641e-02 8.4607638668976470e-02 1.3001641279549414e-01 1.8759487452762702e-01 + 2.5754900895683441e-01 3.3965493779430744e-01 4.3331024634064264e-01 5.3759384878832961e-01 6.5132908316254046e-01 + 7.7314622535699939e-01 9.0154178511424377e-01 1.0349328562818201e+00 1.1717054897399350e+00 1.3102565818166738e+00 + 1.4490291582473986e+00 1.5865412121263560e+00 1.7214084470448441e+00 1.8523614026473965e+00 1.9782575145276269e+00 + 2.0980886961566938e+00 2.2109850373516764e+00 2.3162151996095730e+00 2.4131840597491703e+00 2.5014281146549706e+00 + 2.5806091153285706e+00 2.6505063508648590e+00 2.7110079545661563e+00 2.7621015568249447e+00 2.8038645637913220e+00 + 2.8364542979766156e+00 2.8600981973448825e+00 2.8750842333755031e+00 2.8817516761559574e+00 2.8804823057701157e+00 + 2.8716921439699092e+00 2.8558237581894161e+00 2.8333391711552594e+00 2.8047133934346959e+00 2.7704285829676252e+00 + 2.7309688247181469e+00 2.6868155147671331e+00 2.6384433262347358e+00 2.5863167291097398e+00 2.5308870321738226e+00 + 2.4725899125317596e+00 2.4118433966060167e+00 2.3490462556752334e+00 2.2845767789603002e+00 2.2187918877813502e+00 + 2.1520265552815943e+00 2.0845934975626363e+00 2.0167831036919637e+00 1.9488635738636404e+00 1.8810812369508270e+00 + 1.8136610207193371e+00 1.7468070500507196e+00 1.6807033505858371e+00 1.6155146372447149e+00 1.5513871690559142e+00 + 1.4884496536383409e+00 1.4268141864958608e+00 1.3665772120042590e+00 1.3078204945836447e+00 1.2506120900523854e+00 + 1.1950073085502879e+00 1.1410496616995687e+00 1.0887717878420631e+00 1.0381963502565981e+00 9.8933690422003551e-01 + 9.4219872964247031e-01 8.9677962677415124e-01 8.5307067316958651e-01 8.1105694069385592e-01 7.7071817188505065e-01 + 7.3202941544290212e-01 6.9496162100761794e-01 6.5948219372701189e-01 6.2555550939233484e-01 5.9314339115629977e-01 + 5.6220554903693554e-01 5.3269998356387660e-01 5.0458335504023211e-01 4.7781131998032222e-01 4.5233883634534777e-01 + 4.2812043923464138e-01 4.0511048870905242e-01 3.8326339142174781e-01 3.6253379771729577e-01 3.4287677583286325e-01 + 3.2424796479760154e-01 3.0660370758054967e-01 2.8990116598452254e-01 2.7409841872609064e-01 2.5915454407883409e-01 + 2.4502968839369110e-01 2.3168512174254197e-01 2.1908328186436687e-01 2.0718780752542632e-01 1.9596356233750800e-01 + 1.8537665001230508e-01 1.7539442196444632e-01 1.6598547811304609e-01 1.5711966166996927e-01 1.4876804864444715e-01 + 1.4090293273673637e-01 1.3349780623990259e-01 1.2652733751724909e-01 1.1996734557434463e-01 1.1379477219856060e-01 + 1.0798765209582406e-01 1.0252508141368288e-01 9.7387185001678311e-02 9.2555082724584015e-02 8.8010855111109620e-02 + 8.3737508589961873e-02 7.9718940536826377e-02 7.5939904329596963e-02 7.2385974585237101e-02 6.9043512729294765e-02 + 6.5899633029043336e-02 6.2942169202580001e-02 6.0159641699440547e-02 5.7541225732930634e-02 5.5076720130546430e-02 + 5.2756517056398833e-02 5.0571572648238083e-02 4.8513378601664936e-02 4.6573934725081756e-02 4.4745722480991068e-02 + 4.3021679522073253e-02 4.1395175224364866e-02 3.9859987214311721e-02 3.8410278881708670e-02 3.7040577866510604e-02 + 3.5745755503880039e-02 3.4521007208912380e-02 3.3361833779917971e-02 3.2264023597108116e-02 3.1223635691821294e-02 + 3.0236983660070216e-02 2.9300620393215571e-02 2.8411323597772320e-02 2.7566082075896281e-02 2.6762082737777249e-02 + 2.5996698317105604e-02 2.5267475760840985e-02 2.4572125264713973e-02 2.3908509926274246e-02 2.3274635987705516e-02 + 2.2668643641204911e-02 2.2088798370316409e-02 2.1533482801290083e-02 2.1001189039288493e-02 2.0490511464994254e-02 + 2.0000139967999431e-02 1.9528853594166895e-02 1.9075514584991349e-02 1.8639062787818239e-02 1.8218510416650235e-02 + 1.7812937144080498e-02 1.7421485505751177e-02 1.7043356599549031e-02 1.6677806062561751e-02 1.6324140309613155e-02 + 1.5981713017976018e-02 1.5649921843605585e-02 1.5328205354974755e-02 1.5016040171312250e-02 1.4712938292708366e-02 + 1.4418444610242331e-02 1.4132134584901757e-02 1.3853612084676337e-02 1.3582507369821917e-02 1.3318475216818060e-02 + 1.3061193172097418e-02 1.2810359927147186e-02 1.2565693807050415e-02 1.2326931365025051e-02 1.2093826075940506e-02 + 1.1866147122233661e-02 1.1643678266026136e-02 1.1426216801644407e-02 1.1213572583084475e-02 1.1005567121320226e-02 + 1.0802032746662471e-02 1.0602811831688208e-02 1.0407756070544782e-02 1.0216725810699157e-02 1.0029589433467268e-02 + 9.8462227798860602e-03 9.6665086187306404e-03 9.4903361536790021e-03 9.3176005668363371e-03 9.1482025960089031e-03 + 8.9820481433065535e-03 8.8190479128032462e-03 8.6591170751522117e-03 8.5021749571883021e-03 8.3481447546937537e-03 + 8.1969532666261724e-03 8.0485306492223962e-03 7.9028101885199598e-03 7.7597280899136256e-03 7.6192232834934315e-03 + 7.4812372439735375e-03 7.3457138241272979e-03 7.2125991007052359e-03 7.0818412319012813e-03 6.9533903254870300e-03 + 6.8271983168139705e-03 6.7032188559211503e-03 6.5814072030662141e-03 6.4617201320263939e-03 6.3441158405819764e-03 + 6.2285538676237207e-03 6.1149950163802147e-03 6.0034012832899109e-03 5.8937357920846312e-03 5.7859627326801166e-03 + 5.6800473044990030e-03 5.5759556638887986e-03 5.4736548753111791e-03 5.3731128660109428e-03 5.2742983838981461e-03 + 5.1771809583849582e-03 5.0817308639591330e-03 4.9879190862693046e-03 4.8957172905357560e-03 4.8050977921015592e-03 + 4.7160335289582467e-03 4.6284980360953021e-03 4.5424654215287241e-03 4.4579103438822931e-03 4.3748079913988880e-03 + 4.2931340622749670e-03 4.2128647462132407e-03 4.1339767071033873e-03 4.0564470667446839e-03 3.9802533895282599e-03 + 3.9053736680121076e-03 3.8317863093158128e-03 3.7594701222811860e-03 3.6884043053326127e-03 3.6185684349951674e-03 + 3.5499424550168301e-03 3.4825066660512660e-03 3.4162417158645347e-03 3.3511285900229004e-03 3.2871486030347646e-03 + 3.2242833899080170e-03 3.1625148980992668e-03 3.1018253798278661e-03 3.0421973847258310e-03 2.9836137528083811e-03 + 2.9260576077371064e-03 2.8695123503632708e-03 2.8139616525287708e-03 2.7593894511106498e-03 2.7057799422959966e-03 + 2.6531175760685227e-03 2.6013870509009052e-03 2.5505733086344240e-03 2.5006615295404683e-03 2.4516371275501436e-03 + 2.4034857456453340e-03 2.3561932514012535e-03 2.3097457326723414e-03 2.2641294934160616e-03 2.2193310496436136e-03 + 2.1753371254977782e-03 2.1321346494441173e-03 2.0897107505768314e-03 2.0480527550303662e-03 2.0071481824917164e-03 + 1.9669847428123305e-03 1.9275503327108034e-03 1.8888330325659355e-03 1.8508211032951805e-03 1.8135029833145980e-03 + 1.7768672855772646e-03 1.7409027946878666e-03 1.7055984640891586e-03 1.6709434133182904e-03 1.6369269253308227e-03 + 1.6035384438881917e-03 1.5707675710093030e-03 1.5386040644797400e-03 1.5070378354209296e-03 1.4760589459142243e-03 + 1.4456576066784674e-03 1.4158241748004133e-03 1.3865491515145517e-03 1.3578231800324136e-03 1.3296370434173130e-03 + 1.3019816625059188e-03 1.2748480938728074e-03 1.2482275278369870e-03 1.2221112865106742e-03 1.1964908218862064e-03 + 1.1713577139624703e-03 1.1467036689077198e-03 1.1225205172586891e-03 1.0988002121543120e-03 1.0755348276031765e-03 + 1.0527165567835728e-03 1.0303377103750150e-03 1.0083907149206553e-03 9.8686811121878604e-04 9.6576255274356815e-04 + 9.4506680409354657e-04 9.2477373946662708e-04 9.0487634116191706e-04 8.8536769810608137e-04 8.6624100440530968e-04 + 8.4748955791986991e-04 8.2910675886310736e-04 8.1108610842155551e-04 7.9342120739794852e-04 7.7610575487466887e-04 + 7.5913354689786591e-04 7.4249847518158968e-04 7.2619452583109687e-04 7.1021577808524222e-04 6.9455640307671332e-04 + 6.7921066261025093e-04 6.6417290795844214e-04 6.4943757867335500e-04 6.3499920141575628e-04 6.2085238879914031e-04 + 6.0699183824991856e-04 5.9341233088238896e-04 5.8010873038847818e-04 5.6707598194186137e-04 5.5430911111587280e-04 + 5.4180322281523891e-04 5.2955350022104025e-04 5.1755520374872563e-04 5.0580367001857793e-04 4.9429431083891986e-04 + 4.8302261220136561e-04 4.7198413328763435e-04 4.6117450548847222e-04 4.5058943143359842e-04 4.4022468403297037e-04 + 4.3007610552883886e-04 4.2013960655883260e-04 4.1041116522908330e-04 4.0088682619821882e-04 3.9156269977118005e-04 + 3.8243496100300207e-04 3.7349984881274514e-04 3.6475366510662147e-04 3.5619277391102898e-04 3.4781360051482253e-04 + 3.3961263062063513e-04 3.3158640950565685e-04 3.2373154119109092e-04 3.1604468762060252e-04 3.0852256784754707e-04 + 3.0116195723081836e-04 2.9395968663908575e-04 2.8691264166377101e-04 2.8001776184017647e-04 2.7327203987681688e-04 + 2.6667252089326854e-04 2.6021630166557681e-04 2.5390052988028163e-04 2.4772240339593181e-04 2.4167916951265550e-04 + 2.3576812424967210e-04 2.2998661163024531e-04 2.2433202297460642e-04 2.1880179620031078e-04 2.1339341513026532e-04 + 2.0810440880823181e-04 2.0293235082175821e-04 1.9787485863260665e-04 1.9292959291436311e-04 1.8809425689761319e-04 + 1.8336659572205580e-04 1.7874439579616125e-04 1.7422548416372047e-04 1.6980772787763936e-04 1.6548903338088530e-04 + 1.6126734589430591e-04 1.5714064881157744e-04 1.5310696310104604e-04 1.4916434671449329e-04 1.4531089400280153e-04 + 1.4154473513841234e-04 1.3786403554466153e-04 1.3426699533172857e-04 1.3075184873951283e-04 1.2731686358694039e-04 + 1.2396034072819674e-04 1.2068061351527565e-04 1.1747604726729168e-04 1.1434503874632306e-04 1.1128601563955686e-04 + 1.0829743604811193e-04 1.0537778798212988e-04 1.0252558886227753e-04 9.9739385027582898e-05 9.7017751249615057e-05 + 9.4359290252773662e-05 9.1762632240957511e-05 8.9226434430383569e-05 8.6749380588361721e-05 8.4330180578390864e-05 + 8.1967569911181246e-05 7.9660309301724484e-05 7.7407184232279429e-05 7.5207004521348451e-05 7.3058603898526649e-05 + 7.0960839585107720e-05 6.8912591880629977e-05 6.6912763755002085e-05 6.4960280446513426e-05 6.3054089065330086e-05 + 6.1193158202771814e-05 5.9376477546041213e-05 5.7603057498502742e-05 5.5871928805544500e-05 5.4182142185708361e-05 + 5.2532767967318744e-05 5.0922895730446966e-05 4.9351633954125953e-05 4.7818109668823321e-05 4.6321468114150300e-05 + 4.4860872401664663e-05 4.3435503182825573e-05 4.2044558321957873e-05 4.0687252574273750e-05 3.9362817268785450e-05 + 3.8070499996214428e-05 3.6809564301621984e-05 3.5579289382025496e-05 3.4378969788611451e-05 3.3207915133769052e-05 + 3.2065449802711312e-05 3.0950912669766876e-05 2.9863656819185611e-05 2.8803049270468119e-05 2.7768470708167169e-05 + 2.6759315216115260e-05 2.5774990015931323e-05 2.4814915209964844e-05 2.3878523528387922e-05 2.2965260080560611e-05 + 2.2074582110528148e-05 2.1205958756658535e-05 2.0358870815317476e-05 1.9532810508535560e-05 1.8727281255713447e-05 + 1.7941797449145505e-05 1.7175884233475961e-05 1.6429077288930018e-05 1.5700922618341645e-05 1.4990976337865471e-05 + 1.4298804471386687e-05 1.3623982748522034e-05 1.2966096406226424e-05 1.2324739993882115e-05 1.1699517181902770e-05 + 1.1090040573734860e-05 1.0495931521266495e-05 9.9168199435395021e-06 9.3523441487842465e-06 8.8021506596591475e-06 + 8.2658940417265321e-06 7.7432367350197678e-06 7.2338488887770244e-06 6.7374081991923703e-06 6.2535997501888662e-06 + 5.7821158571569505e-06 5.3226559136389283e-06 4.8749262408651290e-06 4.4386399401326240e-06 4.0135167480073166e-06 + 3.5992828942305738e-06 3.1956709623667747e-06 2.8024197531120341e-06 2.4192741502208947e-06 2.0459849890155880e-06 + 1.6823089274468580e-06 1.3280083196495871e-06 9.8285109196557868e-07 6.4661062138351467e-07 3.1906561636122974e-07 + 0. 0. 0. 0. 0. diff --git a/comd-cl/pots/readme.txt b/comd-cl/pots/readme.txt new file mode 100644 index 0000000..caa2dad --- /dev/null +++ b/comd-cl/pots/readme.txt @@ -0,0 +1,16 @@ +pots: this contains potentials for the EAM potential + +two types of tabular potentials are contained here and available from +http://www.ctcms.nist.gov/~cbecker/Cu.html + +(1) Cu_u6.eam uses the funcfl format to represent the Adams potential +J.B. Adams, S.M. Foiles, and W.G. Wolfer, "Self-diffusion and impurity +diffusion of FCC metals using the 5-frequency model and the Embedded + Atom Method," J. Mater. Res. 4, 102-112 (1989). + +(2) Cu01.eam.alloy uses the setfl format to represent the Mishin potential. +Setfl is contained here for future representation of alloys +Y. Mishin, M.J. Mehl, D.A. Papaconstantopoulos, A.F. Voter, and J.D. Kress, +"Structural stability and lattice defects in copper: Ab initio, tight-binding, +and embedded-atom calculations," + Phys. Rev. B, 63, 224106 (2001). DOI: 10.1103/PhysRevB.63.224106. diff --git a/comd-cl/src-cl/CoMD.c b/comd-cl/src-cl/CoMD.c new file mode 100644 index 0000000..accf86a --- /dev/null +++ b/comd-cl/src-cl/CoMD.c @@ -0,0 +1,1085 @@ +/// \file +/// Main program +/// +/// \mainpage CoMD: A Classical Molecular Dynamics Mini-app +/// +/// CoMD is a reference implementation of typical classical molecular +/// dynamics algorithms and workloads. It is created and maintained by +/// The Exascale Co-Design Center for Materials in Extreme Environments +/// (ExMatEx). http://codesign.lanl.gov/projects/exmatex. The +/// code is intended to serve as a vehicle for co-design by allowing +/// others to extend and/or reimplement it as needed to test performance of +/// new architectures, programming models, etc. +/// +/// The current version of CoMD is available from: +/// https://github.com/exmatex/CoMD +/// +/// To contact the developers of CoMD send email to: exmatex-comd@llnl.gov. +/// +/// Table of Contents +/// ================= +/// +/// Click on the links below to browse the CoMD documentation. +/// +/// \subpage pg_md_basics +/// +/// \subpage pg_building_comd +/// +/// \subpage pg_running_comd +/// +/// \subpage pg_measuring_performance +/// +/// \subpage pg_problem_selection_and_scaling +/// +/// \subpage pg_verifying_correctness +/// +/// \subpage pg_comd_architecture +/// +/// \subpage pg_optimization_targets +/// +/// \subpage pg_whats_new + +#include +#include +#include +#include +#include +#include + +#include "CoMDTypes.h" +#include "decomposition.h" +#include "linkCells.h" +#include "eam.h" +#include "ljForce.h" +#include "initAtoms.h" +#include "memUtils.h" +#include "yamlOutput.h" +#include "parallel.h" +#include "performanceTimers.h" +#include "mycommand.h" +#include "timestep.h" +#include "constants.h" +#include "deformation.h" +#include "helpers.h" +#include "computeOCL.h" + +#define REDIRECT_OUTPUT 0 +#define MIN(A,B) ((A) < (B) ? (A) : (B)) + +static SimFlat* initSimulation(Command cmd); +static void destroySimulation(SimFlat** ps); + +static void initSubsystems(void); +static void finalizeSubsystems(void); + +static BasePotential* initPotential( + int doeam, const char* potDir, const char* potName, const char* potType); +static SpeciesData* initSpecies(BasePotential* pot); +static Validate* initValidate(SimFlat* s); +static void validateResult(const Validate* val, SimFlat *sim); + +static void sumAtoms(SimFlat* s); +static void printThings(SimFlat* s, int iStep, double elapsedTime); +static void printSimulationDataYaml(FILE* file, SimFlat* s); +static void sanityChecks(Command cmd, double cutoff, double latticeConst, char latticeType[8]); + + +int main(int argc, char** argv) +{ + // Prolog + initParallel(&argc, &argv); + profileStart(totalTimer); + initSubsystems(); + timestampBarrier("Starting Initialization\n"); + + yamlAppInfo(yamlFile); + yamlAppInfo(screenOut); + + Command cmd = parseCommandLine(argc, argv); + printCmdYaml(yamlFile, &cmd); + printCmdYaml(screenOut, &cmd); + + SimFlat* sim = initSimulation(cmd); + printSimulationDataYaml(yamlFile, sim); + printSimulationDataYaml(screenOut, sim); + + Validate* validate = initValidate(sim); // atom counts, energy + + oclInit(cmd.useGpu); + + timestampBarrier("Initialization Finished\n"); + + timestampBarrier("Starting OpenCL SoA simulation\n"); + + OclSimSoa* oclSimSoa = initOclSimSoa(sim, cmd); + + timestampBarrier("Starting simulation\n"); + + // This is the CoMD main loop + const int nSteps = sim->nSteps; + const int printRate = sim->printRate; + int iStep = 0; + profileStart(loopTimer); + for (; iStepdefInfo->stress); + + startTimer(timestepTimer); + + computeIterationSoa2(sim, oclSimSoa); + stopTimer(timestepTimer); + + iStep += printRate; + } + profileStop(loopTimer); + + sumAtoms(sim); + printThings(sim, iStep, getElapsedTime(oclTimestep)); + printTensor(iStep, sim->defInfo->stress); + timestampBarrier("Ending simulation\n"); + + // Epilog + validateResult(validate, sim); + profileStop(totalTimer); + + printPerformanceResults(sim->atoms->nGlobal); + printPerformanceResultsYaml(yamlFile); + + destroySimulation(&sim); + comdFree(validate); + finalizeSubsystems(); + + timestampBarrier("CoMD Ending\n"); + destroyParallel(); + + return 0; +} + +/// Initialized the main CoMD data stucture, SimFlat, based on command +/// line input from the user. Also performs certain sanity checks on +/// the input to screen out certain non-sensical inputs. +/// +/// Simple data members such as the time step dt are initialized +/// directly, substructures such as the potential, the link cells, the +/// atoms, etc., are initialized by calling additional initialization +/// functions (initPotential(), initLinkCells(), initAtoms(), etc.). +/// Initialization order is set by the natural dependencies of the +/// substructure such as the atoms need the link cells so the link cells +/// must be initialized before the atoms. +SimFlat* initSimulation(Command cmd) +{ + SimFlat* sim = comdMalloc(sizeof(SimFlat)); + sim->nSteps = cmd.nSteps; + sim->printRate = cmd.printRate; + sim->dt = cmd.dt; + sim->domain = NULL; + sim->boxes = NULL; + sim->atoms = NULL; + sim->ePotential = 0.0; + sim->eKinetic = 0.0; + sim->atomExchange = NULL; + + sim->pot = initPotential(cmd.doeam, cmd.potDir, cmd.potName, cmd.potType); + real_t latticeConstant = cmd.lat; + if (cmd.lat < 0.0) + latticeConstant = sim->pot->lat; + + // ensure input parameters make sense. + sanityChecks(cmd, sim->pot->cutoff, latticeConstant, sim->pot->latticeType); + + sim->species = initSpecies(sim->pot); + + real3 globalExtent; + globalExtent[0] = cmd.nx * latticeConstant; + globalExtent[1] = cmd.ny * latticeConstant; + globalExtent[2] = cmd.nz * latticeConstant; + + sim->domain = initDecomposition( + cmd.xproc, cmd.yproc, cmd.zproc, globalExtent); + + sim->boxes = initLinkCells(sim->domain, sim->pot->cutoff); + sim->atoms = initAtoms(sim->boxes); + + sim->defInfo = initDeformation(sim, cmd.defGrad); + + // create lattice with desired temperature and displacement. + createFccLattice(cmd.nx, cmd.ny, cmd.nz, latticeConstant, sim); + setTemperature(sim, cmd.temperature); + randomDisplacements(sim, cmd.initialDelta); + + sim->atomExchange = initAtomHaloExchange(sim->domain, sim->boxes); + + forwardDeformation(sim); + + // Forces must be computed before we call the time stepper. + startTimer(redistributeTimer); + redistributeAtoms(sim); + stopTimer(redistributeTimer); + + startTimer(computeForceTimer); + computeForce(sim); + stopTimer(computeForceTimer); + + kineticEnergy(sim); + + return sim; +} + +/// frees all data associated with *ps and frees *ps +void destroySimulation(SimFlat** ps) +{ + if ( ! ps ) return; + + SimFlat* s = *ps; + if ( ! s ) return; + + BasePotential* pot = s->pot; + if ( pot) pot->destroy(&pot); + destroyLinkCells(&(s->boxes)); + destroyAtoms(s->atoms); + destroyHaloExchange(&(s->atomExchange)); + comdFree(s); + *ps = NULL; + + return; +} + +void initSubsystems(void) +{ +#if REDIRECT_OUTPUT + freopen("testOut.txt","w",screenOut); +#endif + stressOut = fopen("stressOut.txt","w"); + + yamlBegin(); +} + +void finalizeSubsystems(void) +{ +#if REDIRECT_OUTPUT + fclose(screenOut); +#endif + fclose(stressOut); + yamlEnd(); +} + +/// decide whether to get LJ or EAM potentials +BasePotential* initPotential( + int doeam, const char* potDir, const char* potName, const char* potType) +{ + BasePotential* pot = NULL; + + if (doeam) + pot = initEamPot(potDir, potName, potType); + else + pot = initLjPot(); + assert(pot); + return pot; +} + +SpeciesData* initSpecies(BasePotential* pot) +{ + SpeciesData* species = comdMalloc(sizeof(SpeciesData)); + + strcpy(species->name, pot->name); + species->atomicNo = pot->atomicNo; + species->mass = pot->mass; + + return species; +} + +Validate* initValidate(SimFlat* sim) +{ + sumAtoms(sim); + Validate* val = comdMalloc(sizeof(Validate)); + val->eTot0 = (sim->ePotential + sim->eKinetic) / sim->atoms->nGlobal; + val->nAtoms0 = sim->atoms->nGlobal; + + if (printRank()) + { + fprintf(screenOut, "\n"); + printSeparator(screenOut); + fprintf(screenOut, "Initial energy : %14.12f, atom count : %d \n", + val->eTot0, val->nAtoms0); + fprintf(screenOut, "\n"); + } + return val; +} + +void validateResult(const Validate* val, SimFlat* sim) +{ + if (printRank()) + { + real_t eFinal = (sim->ePotential + sim->eKinetic) / sim->atoms->nGlobal; + + int nAtomsDelta = (sim->atoms->nGlobal - val->nAtoms0); + + fprintf(screenOut, "\n"); + fprintf(screenOut, "\n"); + fprintf(screenOut, "Simulation Validation:\n"); + + fprintf(screenOut, " Initial energy : %14.12f\n", val->eTot0); + fprintf(screenOut, " Final energy : %14.12f\n", eFinal); + fprintf(screenOut, " eFinal/eInitial : %f\n", eFinal/val->eTot0); + if ( nAtomsDelta == 0) + { + fprintf(screenOut, " Final atom count : %d, no atoms lost\n", + sim->atoms->nGlobal); + } + else + { + fprintf(screenOut, "#############################\n"); + fprintf(screenOut, "# WARNING: %6d atoms lost #\n", nAtomsDelta); + fprintf(screenOut, "#############################\n"); + } + } +} + +void sumAtoms(SimFlat* s) +{ + // sum atoms across all processers + s->atoms->nLocal = 0; + for (int i = 0; i < s->boxes->nLocalBoxes; i++) + { + s->atoms->nLocal += s->boxes->nAtoms[i]; + } + + startTimer(commReduceTimer); + addIntParallel(&s->atoms->nLocal, &s->atoms->nGlobal, 1); + stopTimer(commReduceTimer); +} + +/// Prints current time, energy, performance etc to monitor the state of +/// the running simulation. Performance per atom is scaled by the +/// number of local atoms per process this should give consistent timing +/// assuming reasonable load balance +void printThings(SimFlat* s, int iStep, double elapsedTime) +{ + // keep track previous value of iStep so we can calculate number of steps. + static int iStepPrev = -1; + static int firstCall = 1; + + int nEval = iStep - iStepPrev; // gives nEval = 1 for zeroth step. + iStepPrev = iStep; + + if (! printRank() ) + return; + + if (firstCall) + { + firstCall = 0; + fprintf(screenOut, + "# Performance\n" + "# Loop Time(fs) Total Energy Potential Energy Kinetic Energy Temperature (us/atom) # Atoms\n"); + fflush(screenOut); + } + + real_t time = iStep*s->dt; + real_t eTotal = (s->ePotential+s->eKinetic) / s->atoms->nGlobal; + real_t eK = s->eKinetic / s->atoms->nGlobal; + real_t eU = s->ePotential / s->atoms->nGlobal; + real_t Temp = (s->eKinetic / s->atoms->nGlobal) / (kB_eV * 1.5); + + double timePerAtom = 1.0e6*elapsedTime/(double)(nEval*s->atoms->nLocal); + + fprintf(screenOut, " %6d %10.2f %18.12f %18.12f %18.12f %12.4f %10.4f %12d\n", + iStep, time, eTotal, eU, eK, Temp, timePerAtom, s->atoms->nGlobal); +} + +/// Print information about the simulation in a format that is (mostly) +/// YAML compliant. +void printSimulationDataYaml(FILE* file, SimFlat* s) +{ + // All ranks get maxOccupancy + int maxOcc = maxOccupancy(s->boxes); + + // Only rank 0 prints + if (!PRINT_YAML || !printRank()) + return; + + fprintf(file,"Simulation data: \n"); + fprintf(file," Total atoms : %d\n", + s->atoms->nGlobal); + fprintf(file," Min global bounds : [ %14.10f, %14.10f, %14.10f ]\n", + s->domain->globalMin[0], s->domain->globalMin[1], s->domain->globalMin[2]); + fprintf(file," Max global bounds : [ %14.10f, %14.10f, %14.10f ]\n", + s->domain->globalMax[0], s->domain->globalMax[1], s->domain->globalMax[2]); + printSeparator(file); + fprintf(file,"Decomposition data: \n"); + fprintf(file," Processors : %6d,%6d,%6d\n", + s->domain->procGrid[0], s->domain->procGrid[1], s->domain->procGrid[2]); + fprintf(file," Local boxes : %6d,%6d,%6d = %8d\n", + s->boxes->gridSize[0], s->boxes->gridSize[1], s->boxes->gridSize[2], + s->boxes->gridSize[0]*s->boxes->gridSize[1]*s->boxes->gridSize[2]); + fprintf(file," Box size : [ %14.10f, %14.10f, %14.10f ]\n", + s->boxes->boxSize[0], s->boxes->boxSize[1], s->boxes->boxSize[2]); + fprintf(file," Box factor : [ %14.10f, %14.10f, %14.10f ] \n", + s->boxes->boxSize[0]/s->pot->cutoff, + s->boxes->boxSize[1]/s->pot->cutoff, + s->boxes->boxSize[2]/s->pot->cutoff); + fprintf(file, " Max Link Cell Occupancy: %d of %d\n", + maxOcc, MAXATOMS); + printSeparator(file); + fprintf(file,"Potential data: \n"); + s->pot->print(file, s->pot); + + fflush(file); +} + +/// Check that the user input meets certain criteria. +void sanityChecks(Command cmd, double cutoff, double latticeConst, char latticeType[8]) +{ + int failCode = 0; + + // Check that domain grid matches number of ranks. (fail code 1) + int nProcs = cmd.xproc * cmd.yproc * cmd.zproc; + if (nProcs != getNRanks()) + { + failCode |= 1; + if (printRank() ) + fprintf(screenOut, + "\nNumber of MPI ranks must match xproc * yproc * zproc\n"); + } + + // Check whether simuation is too small (fail code 2) + double minx = 2*cutoff*cmd.xproc; + double miny = 2*cutoff*cmd.yproc; + double minz = 2*cutoff*cmd.zproc; + double sizex = cmd.nx*latticeConst; + double sizey = cmd.ny*latticeConst; + double sizez = cmd.nz*latticeConst; + + if ( sizex < minx || sizey < miny || sizez < minz) + { + failCode |= 2; + if (printRank()) + fprintf(screenOut,"\nSimulation too small.\n" + " Increase the number of unit cells to make the simulation\n" + " at least (%3.2f, %3.2f. %3.2f) Ansgstroms in size\n", + minx, miny, minz); + } + + // Check for supported lattice structure (fail code 4) + if (strcasecmp(latticeType, "FCC") != 0) + { + failCode |= 4; + if ( printRank() ) + fprintf(screenOut, + "\nOnly FCC Lattice type supported, not %s. Fatal Error.\n", + latticeType); + } + int checkCode = failCode; + bcastParallel(&checkCode, sizeof(int), 0); + // This assertion can only fail if different tasks failed different + // sanity checks. That should not be possible. + assert(checkCode == failCode); + + if (failCode != 0) + exit(failCode); +} + +// -------------------------------------------------------------- + + +/// \page pg_building_comd Building CoMD +/// +/// CoMD is written with portability in mind and should compile using +/// practically any compiler that implements the C99 standard. You will +/// need to create a Makefile by copying the sample provided with the +/// distribution (Makefile.vanilla). +/// +/// $ cp Makefile.vanilla Makefile +/// +/// and use the make command to build the code +/// +/// $ make +/// +/// The sample Makefile will compile the code on many platforms. See +/// comments in Makefile.vanilla for information about specifying the +/// name of the C compiler, and/or additional compiler switches that +/// might be necessary for your platform. +/// +/// The main options available in the Makefile are toggling single/double +/// precision and enabling/disabling MPI. In the event MPI is not +/// available, setting the DO_MPI flag to OFF will create a purely +/// serial build (you will likely also need to change the setting of +/// CC). +/// +/// The makefile should handle all the dependency checking needed, via +/// makedepend. +/// +/// 'make clean' removes the object and dependency files. +/// +/// 'make distclean' additionally removes the executable file and the +/// documentation files. +/// +/// Other build options +/// ------------------- +/// +/// Various other options are made available by \#define arguments within +/// some of the source files. +/// +/// #REDIRECT_OUTPUT in CoMD.c +/// +/// Setting this to 1 will redirect all screen output to a file, +/// currently set to 'testOut.txt'. +/// +/// #POT_SHIFT in ljForce.c +/// +/// This is set to 1.0 by default, and shifts the values of the cohesive +/// energy given by the Lennard-Jones potential so it is zero at the +/// cutoff radius. This setting improves energy conservation +/// step-to-step as it reduces the noise generated by atoms crossing the +/// cutoff threshold. However, it does not affect the long-term energy +/// conservation of the code. +/// +/// #MAXATOMS in linkCells.h +/// +/// The default value is 64, which allows ample padding of the linkCell +/// structure to allow for density fluctuations. Reducing it may improve +/// the efficiency of the code via improved thread utilization and +/// reduced memory footprint. + +// -------------------------------------------------------------- + + +// -------------------------------------------------------------- + + +/// \page pg_measuring_performance Measuring Performance +/// +/// CoMD implements a simple and extensible system of internal timers to +/// measure the performance profile of the code. As explained in +/// performanceTimers.c, it is easy to create additional timers and +/// associate them with code regions of specific interest. In addition, +/// the getTime() and getTick() functions can be easily reimplemented to +/// take advantage of platform specific timing resources. +/// +/// A timing report is printed at the end of each simulation. +/// +/// ~~~~ +/// Timings for Rank 0 +/// Timer # Calls Avg/Call (s) Total (s) % Loop +/// ___________________________________________________________________ +/// total 1 50.6701 50.6701 100.04 +/// loop 1 50.6505 50.6505 100.00 +/// timestep 1 50.6505 50.6505 100.00 +/// position 10000 0.0000 0.0441 0.09 +/// velocity 20000 0.0000 0.0388 0.08 +/// redistribute 10001 0.0003 3.4842 6.88 +/// atomHalo 10001 0.0002 2.4577 4.85 +/// force 10001 0.0047 47.0856 92.96 +/// eamHalo 10001 0.0001 1.0592 2.09 +/// commHalo 60006 0.0000 1.7550 3.46 +/// commReduce 12 0.0000 0.0003 0.00 +/// +/// Timing Statistics Across 8 Ranks: +/// Timer Rank: Min(s) Rank: Max(s) Avg(s) Stdev(s) +/// _____________________________________________________________________________ +/// total 3: 50.6697 0: 50.6701 50.6699 0.0001 +/// loop 0: 50.6505 4: 50.6505 50.6505 0.0000 +/// timestep 0: 50.6505 4: 50.6505 50.6505 0.0000 +/// position 2: 0.0437 0: 0.0441 0.0439 0.0001 +/// velocity 2: 0.0380 4: 0.0392 0.0385 0.0004 +/// redistribute 0: 3.4842 1: 3.7085 3.6015 0.0622 +/// atomHalo 0: 2.4577 7: 2.6441 2.5780 0.0549 +/// force 1: 46.8624 0: 47.0856 46.9689 0.0619 +/// eamHalo 3: 0.2269 6: 1.2936 1.0951 0.3344 +/// commHalo 3: 1.0803 6: 2.1856 1.9363 0.3462 +/// commReduce 6: 0.0002 2: 0.0003 0.0003 0.0000 +/// +/// --------------------------------------------------- +/// Average atom update rate: 9.39 us/atom/task +/// --------------------------------------------------- +/// +/// ~~~~ +/// This report consists of two blocks. The upper block lists the absolute +/// wall clock time spent in each timer on rank 0 of the job. The lower +/// block reports minimum, maximum, average, and standard deviation of +/// times across all tasks. +/// The ranks where the minimum and maximum values occured are also reported +/// to aid in identifying hotspots or load imbalances. +/// +/// The last line of the report gives the atom update rate in +/// microseconds/atom/task. Since this quantity is normalized by both +/// the number of atoms and the number of tasks it provides a simple +/// figure of merit to compare performance between runs with different +/// numbers of atoms and different numbers of tasks. Any increase in +/// this number relative to a large number of atoms on a single task +/// represents a loss of parallel efficiency. +/// +/// Choosing the problem size correctly has important implications for the +/// reported performance. Small problem sizes may run entirely in the cache +/// of some architectures, leading to very good performance results. +/// For general characterization of performance, it is probably best to +/// choose problem sizes which force the code to access main memory, even +/// though there may be strong scaling scenarios where the code is indeed +/// running mainly in cache. + +// -------------------------------------------------------------- + + +/// \page pg_problem_selection_and_scaling Problem Selection and Scaling +/// +/// CoMD is a reference molecular dynamics simulation code as used in +/// materials science. +/// +/// Problem Specification {#sec_problem_spec} +/// ====================== +/// +/// The reference problem is solid Copper starting from a face-centered +/// cubic (FCC) lattice. The initial thermodynamic conditions +/// (Temperature and Volume (via the lattice spacing, lat))can be specified +/// from the command line input. The default is 600 K and standard +/// volume (lat = 3.615 Angstroms). +/// Different temperatures (e.g. T =3000K) and volumes can be +/// specified to melt the system and enhance the interchange of atoms +/// between domains. +/// +/// The dynamics is micro-canonical (NVE = constant Number of atoms, +/// constant total system Volume, and constant total system Energy). As +/// a result, the temperature is not fixed. Rather, the temperature will +/// adjust from the initial temperature (as specified on the command line) +/// to a final temperature as the total system kinetic energy comes into +/// equilibrium with the total system potential energy. +/// +/// The total size of the problem (number of atoms) is specified by the +/// number (nx, ny, nz) of FCC unit cells in the x, y, z directions: nAtoms +/// = 4 * nx * ny * nz. The default size is nx = ny = nz = 20 or 32,000 atoms. +/// +/// The simulation models bulk copper by replicating itself in every +/// direction using periodic boundary conditions. +/// +/// Two interatomic force models are available: the Lennard-Jones (LJ) +/// two-body potential (ljForce.c) and the many-body Embedded-Atom Model (EAM) +/// potential (eam.c). The LJ potential is included for comparison and +/// is a valid approximation for constant volume and uniform +/// density. The EAM potential is a more accurate model of cohesion in +/// simple metals like Copper and includes the energetics necessary to +/// model non-uniform density and free surfaces. +/// +/// Scaling Studies in CoMD {#sec_scaling_studies} +/// ======================= +/// +/// CoMD implements a simple geometric domain decomposition to divide +/// the total problem space into domains, which are owned by MPI +/// ranks. Each domain is a single-program multiple data (SPMD) +/// partition of the larger problem. +/// +/// Caution: When doing scaling studies, it is important to distinguish +/// between the problem setup phase and the problem execution phase. Both +/// are important to the workflow of doing molecular dynamics, but it +/// is the execution phase we want to quantify in the scaling studies +/// described below, for that dominates the execution time for long runs +/// (millions of time steps). The problem setup can be an appreciable fraction +/// of the execution time for short runs (the default is 100 time steps) +/// and erroneous conclusions drawn. +/// +/// This code is configured with timers. The times are reported per particle +/// and the timers for the force calculation, timestep, etc start after the +/// initialization phase is done. +/// +/// Weak Scaling {#ssec_weak_scaling} +/// ----------- +/// +/// A weak scaling test fixes the amount of work per processor and +/// compares the execution time over number of processors. Weak scaling +/// keeps the ratio of inter-processor communication (surface) to +/// intra-processor work (volume) fixed. The amount of inter-processor +/// work scales with the number of processors in the domain and O(1000) +/// atoms per domain are needed for reasonable performance. +/// +/// Examples, +/// +/// - Increase in processor count by 8:
+/// (xproc=yproc=zproc=2, nx=ny=nz=20) -> (xproc=yproc=zproc=4, nx=ny=nz=40) +/// +/// - Increase in processor count by 2:
+/// (xproc=yproc=zproc=2, nx=ny=nz=20) -> (xproc=yproc=2, zproc=4, nx=ny=20, nz=40) +/// +/// In general, it is wise to keep the ratio of processor count to +/// system size in each direction fixed (i.e. cubic domains): xproc_0 / nx_0 = xproc_1 / +/// nx_1, since this minimizes surface area to volume. +/// Feel free to experiment, you might learn something about +/// algorithms to optimize communication relative to work. +/// +/// Strong Scaling {#ssec_strong_scaling} +/// --------------- +/// +/// A strong scaling test fixes the total problem size and compares the +/// execution time for different numbers of processors. Strong scaling +/// increases the ratio of inter-processor communication (surface) to +/// intra-processor work (volume). +/// +/// Examples, +/// +/// - Increase in processor count by 8:
+/// (xproc=yproc=zproc=2, nx=ny=nz=20) -> (xproc=yproc=zproc=4, nx=ny=nz=20) +/// +/// - Increase in processor count by 2:
+/// (xproc=yproc=zproc=2, nx=ny=nz=20) -> (xproc=yproc=2, zproc=4, nx=ny=nz=20) +/// +/// The domain decomposition requires O(1000) atoms per domain and +/// begins to scale poorly for small numbers of atoms per domain. +/// Again, feel free to experiment, you might learn something here as +/// well. For example, when molecular dynamics codes were written for +/// vector supercomputers, large lists of force pairs were created for +/// the vector processor. These force lists provide a natural force +/// decomposition for early parallel computers (Fast Parallel Algorithms +/// for Short-Range Molecular Dynamics, S. J. Plimpton, J Comp Phys, +/// 117, 1-19 (1995).) Using replicated data, force decomposition can +/// scale to fewer than one atom per processor and is a natural +/// mechanism to exploit intra-processor parallelism. +/// +/// For further details see for example: +/// https://support.scinet.utoronto.ca/wiki/index.php/Introduction_To_Performance + + +// -------------------------------------------------------------- + + +/// \page pg_verifying_correctness Verifying Correctness +/// +/// Verifying the correctness of an MD simulation is challenging. +/// Because MD is Lyapunov unstable, any small errors, even harmless +/// round-off errors, will lead to a long-term divergence in the atom +/// trajectories. Hence, comparing atom positions at the end of a run +/// is not always a useful verification technique. (Such divergences +/// are not a problem for science applications of MD since they do not +/// alter the statistical physics.) Small, single-particle errors can +/// also be difficult to detect in system-wide quantities such as the +/// kinetic or potential energy that are averaged over a large number of +/// particles. +/// +/// In spite of these challenges, there are several methods which are +/// likely to catch significant errors. +/// +/// Cohesive Energy {#sec_ver_cohesive_energy} +/// =============== +/// +/// With a perfect lattice as the initial structure (this is the +/// default), the potential energy per atom is the cohesive energy. +/// This value should be computed correctly to many decimal places. Any +/// variation beyond the last 1 or 2 decimal places is cause for +/// investigation. The correct values for the cohesive energy are +/// +/// | Potential | Cohesive Energy | +/// | :------------- | :-------------- | +/// | Lennard-Jones | -1.243619295058 | +/// | EAM (Adams) | -3.538079224691 | +/// | EAM (Mishin) | -3.539999969176 | +/// +/// The \link sec_command_line_options command +/// line options \endlink documentation explains the switches used to +/// select the potential used in the simulation. +/// +/// Note that the cohesive energy calculation is not sensitive to errors +/// in forces. It is also performed on a highly symmetric structure so +/// there are many errors this will not catch. Still, it is a good +/// first check. +/// +/// Energy Conservation {#sec_ver_energy_conservation} +/// =================== +/// +/// A correctly implemented force kernel, with an appropriate time step +/// (the default value of 1 fs is conservative for temperatures under +/// 10,000K) will conserve total energy over long times to 5 or more +/// digits. Any long term systematic drift in the total energy is a +/// cause for concern. +/// +/// To facilitate checking energy conservation CoMD prints the final and +/// initial values of the total energy. When comparing these values, pay +/// careful attention to these details: +/// +/// - It is common to observe an initial transient change in the total +/// energy. Differences in the total energy of 2-3% can be expected in +/// the first 10-100 time steps. +/// - The best way to check energy conservation is to run at least +/// several thousand steps and look at the slope of the total energy +/// ignoring at least the first one or two thousand steps. More steps +/// are even better. +/// - Set the temperature to at least several hundred K. This ensures +/// that atoms will sample a large range of configurations and expose +/// possible errors. +/// - Fluctuations in the energy can make it difficult to tell if +/// conservation is observed. Increasing the number of atoms will reduce +/// the fluctuations. +/// +/// +/// Particle Conservation {#sec_ver_particle_conservation} +/// ===================== +/// +/// The simulation should always end with the same number of particles +/// it started with. Any change is a bug. CoMD checks the initial and +/// final number of particles and prints a warning at the end of the +/// simulation if they are not equal. +/// +/// Reproducibility {#sec_ver_reproducibility} +/// =============== +/// +/// The same simulation run repeatedly on the same hardware should +/// produce the same result. Because parallel computing can add +/// elements of non-determinism we do not expect perfect long term +/// reproducibility, however over a few hundred to a few thousand time +/// steps the energies should not exhibit run-to-run differences outside +/// the last 1 or 2 decimal places. Larger differences are a sign of +/// trouble and should be investigated. This kind of test is +/// practically the only way to detect race conditions in shared memory +/// parallelism. +/// +/// Portability {#sec_ver_portability} +/// =========== +/// +/// In our experience, simulations that start from the same initial +/// condition tend to produce very similar trajectories over short terms +/// (100 to 1000 time step), even on different hardware platforms. +/// Short term differences beyond the last 1 or 2 decimal places should +/// likely be investigated. +/// +/// General Principles {#sec_ver_general} +/// ======================= +/// +/// - Simulations run at 0K are too trivial for verification, set +/// the initial temperature to at least several hundred K. +/// - Longer runs are better to check conservation. Compare +/// energies after initial transients are damped out. +/// - Larger runs are better to check conservation. Fluctuations in the +/// energy are averaged out. +/// - Short term (order 100 time steps) discrepancies from run-to-run +/// or platform-to platform beyond the last one or two decimal places +/// are reason for concern. Differences in 4th or 5th decimal place +/// is almost certainly a bug. +/// - Contact the CoMD developers (exmatex-comd@llnl.gov) if you have +/// questions about validation. +/// + +// -------------------------------------------------------------- + + +/// \page pg_comd_architecture CoMD Architecture +/// +/// Program Flow {#sec_program_flow} +/// ============ +/// +/// We have attempted to make the program flow in CoMD 1.1 as simple and +/// transparent as possible. The main program consists of three blocks: +/// prolog, main loop, and epilog. +/// +/// Prolog {#ssec_flow_prolog} +/// ------- +/// +/// The job of the prolog is to initialize the simulation and prepare +/// for the main loop. Notable tasks in the prolog include calling +/// - initParallel() to start MPI +/// - parseCommandLine() to read the command line options +/// - initSimulation() to initialize the main data structure, SimFlatSt. +/// This includes tasks such as +/// - initEamPot() to read tabular data for the potential function +/// - initDecomposition() to set up the domain decomposition +/// - createFccLattice() to generate an initial structure for the atoms +/// - initValidate() to store initial data for a simple validation check +/// +/// In CoMD 1.1 all atomic structures are internally generated so +/// there is no need to read large files with atom coordinate data. +/// +/// Main Loop {#ssec_flow_main_loop} +/// --------- +/// +/// The main loop calls +/// - timestep(), the integrator to update particle positions, +/// - printThings() to periodically prints simulation information +/// +/// The timestep() function is the heart of the code as it choreographs +/// updating the particle positions, along with computing forces +/// (computeForce()) and communicating atoms between ranks +/// (redistributeAtoms()). +/// +/// Epilog {#ssec_flow_epilog} +/// ------- +/// +/// The epilog code handles end of run bookkeeping such as +/// - validateResult() to check validation +/// - printPerformanceResults() to print a performance summary +/// - destroySimulation() to free memory +/// +/// Key Data Structures {#sec_key_data_structures} +/// ================== +/// +/// Practically all data in CoMD belongs to the SimFlatSt structure. +/// This includes: +/// - BasePotentialSt A polymorphic structure for the potential model +/// - HaloExchangeSt A polymorphic strcuture for communication halo data +/// - DomainSt The parallel domain decomposition +/// - LinkCellSt The link cells +/// - AtomsSt The atom coordinates and velocities +/// - SpeciesDataSt Properties of the atomic species being simulated. +/// +/// Consult the individual pages for each of these structures to learn +/// more. The descriptions in haloExchange.c and initLinkCells() are +/// especially useful to understand how the atoms are commuicated +/// between tasks and stored in link cells for fast pair finding. + +// -------------------------------------------------------------- + + +/// \page pg_optimization_targets Optimization Targets +/// +/// Computation {#sec_computation} +/// ============ +/// +/// The computational effort of classical MD is usually highly focused +/// in the force kernel. The two force kernels supplied by CoMD are +/// eamForce() and ljForce(). Both kernels are fundamentally loops over +/// pairs of atoms with significant opportunity to exploit high levels +/// of concurrency. One potential challenge when reordering or +/// parallelizing the pair loop structure is preventing race conditions +/// that result if two concurrent pair evaluations try to simultaneously +/// increment the forces and energies on the same atom. +/// +/// The supplied EAM kernel uses interpolation from tabular data to +/// evaluate functions. Hence the interpolate() function is another +/// potential optimization target. Note that the two potential files +/// distributed with CoMD have very different sizes. The Adams +/// potential (Cu_u6.eam) has 500 points per function in the table while +/// the Mishin potential (Cu01.eam.alloy) has 10,000 points per +/// function. This difference could potentially impact important +/// details such as cache miss rates. +/// +/// Communication {#sec_communication} +/// ============= +/// +/// As the number of atoms per MPI rank decreases, the communication +/// routines will start to require a significant fraction of the +/// run time. The main communication routine in CoMD is haloExchange(). +/// The halo exchange is simple nearest neighbor, point-to-point +/// communication so it should scale well to practically any number of +/// nodes. +/// +/// The halo exchange in CoMD 1.1 is a very simple 6-direction +/// structured halo exchange (see haloExchange.c). Other exchange +/// algorithms can be implemented without much difficulty. +/// +/// The halo exchange function is called in two very different contexts. +/// The main usage is to exchange halo particle information (see +/// initAtomHaloExchange()). This process is coordinated by the +/// redistributeAtoms() function. +/// +/// In addition to the atom exchange, when using the EAM potential, a +/// halo exchange is performed in the force routine (see +/// initForceHaloExchange()). + + +// -------------------------------------------------------------- + + +/// \page pg_whats_new New Features and Changes in CoMD 1.1 +/// +/// The main goals of the 1.1 release were to add support for MPI and to +/// improve the structure and clarity of the code. Achieving these +/// goals required considerable changes compared to the 1.0 release. +/// However, the core structure of the most computationally intensive +/// kernels (the force routines) is mostly unchanged. We believe that +/// lessons learned from optimizing 1.0 force kernels to specific +/// hardware or programming models can be quickly transferred to kernels +/// in the 1.1 release. +/// +/// Significant changes in CoMD 1.1 include: +/// +/// - MPI support. Both MPI and single node serial executables can be +/// built from the same source files. +/// +/// - Improved modularity and code clarity. Major data structures are +/// now organized with their own structs and initialization routines. +/// +/// - The build system has been simplified to use only standard +/// Makefiles instead of CMake. +/// +/// - The halo exchange operation needed to communicate remote particle +/// data between MPI ranks also creates "image" particles in the +/// serial build. +/// +/// - Unified force kernels for both serial and MPI builds +/// +/// - The addition of remote/image atoms allows periodic boundary +/// conditions to be handled outside the force loop. +/// +/// - An additional communication/data copy step to handle electron +/// density on remote/image atoms has been added to the EAM force +/// loop. +/// +/// - The coordinate system has been simplified to a single global +/// coordinate system for all particles. +/// +/// - Evaluation of energies and forces using a Chebyshev polynomial +/// fits has been removed. Polynomial approximation of energies and +/// forces will return in a future CoMD version. +/// +/// - Atomic structures are now generated internally, eliminating the +/// requirement to read, write, and distribute large atom +/// configuration files. Arbitrarily large initial structures can +/// be generated with specified initial temperature and random +/// displacements from lattice positions. Code to read/write atomic +/// positions has been removed. +/// +/// - EAM potentials are now read from standard funcfl and setfl format +/// files. Voter style files are no longer supported. +/// +/// - Collection of performance metrics is significantly improved. +/// Developers can easily add new timers to regions of interest. The +/// system is also designed to allow easy integration with platform +/// specific API's to high resolution timers, cycle counters, +/// hardware counters, etc. +/// +/// +/// - Hooks to in-situ analysis and visualization have been removed. +/// In-situ analysis capabilities will return in a future CoMD release. +/// +/// Please contact the CoMD developers (exematex-comd@llnl.gov) if +/// any of the deleted features negative impacts your work. We +/// may be able to help produce a custom version that includes the code +/// you need. + + +// -------------------------------------------------------------- + + +/// \page pg_md_basics MD Basics +/// +/// The molecular dynamics (MD) computer simulation method is a well +/// established and important tool for the study of the dynamical +/// properties of liquids, solids, and other systems of interest in +/// Materials Science and Engineering, Chemistry and Biology. A material +/// is represented in terms of atoms and molecules. The method of MD +/// simulation involves the evaluation of the force acting on each atom +/// due to all other atoms in the system and the numerical integration +/// of the Newtonian equations of motion. Though MD was initially +/// developed to compute the equilibrium thermodynamic behavior of +/// materials (equation of state), most recent applications have used MD +/// to study non-equilibrium processes. +/// +/// Wikipeda offers a basic introduction to molecular dynamics with +/// many references: +/// +/// http://en.wikipedia.org/wiki/Molecular_dynamics +/// +/// For a thorough treatment of MD methods, see: +/// - "Computer simulation of liquids" by M.P. Allen and D.J. Tildesley +/// (Oxford, 1989) +/// ISBN-10: 0198556454 | ISBN-13: 978-0198556459. +/// +/// For an understanding of MD simulations and application to statistical mechanics: +/// - "Understanding Molecular Simulation, Second Edition: From Algorithms +/// to Applications," by D. Frenkel and B. Smit (Academic Press, 2001) +/// ISBN-10: 0122673514 | ISBN-13: 978-0122673511 +/// - "Statistical and Thermal Physics: With Computer Applications," by +/// H. Gould and J. Tobochnik (Princeton, 2010) +/// ISBN-10: 0691137447 | ISBN-13: 978-0691137445 +/// +/// CoMD implements both the Lennard-Jones Potential (ljForce.c) and the +/// Embedded Atom Method Potential (eam.c). +/// diff --git a/comd-cl/src-cl/CoMD.h b/comd-cl/src-cl/CoMD.h new file mode 100644 index 0000000..d86f31f --- /dev/null +++ b/comd-cl/src-cl/CoMD.h @@ -0,0 +1,23 @@ +#ifndef COMD_H +#define COMD_H +#include "CoMDTypes.h" +#include "mycommand.h" + +static SimFlat* initSimulation(Command cmd); +static void destroySimulation(SimFlat** ps); + +static void initSubsystems(void); +static void finalizeSubsystems(void); + +static BasePotential* initPotential( + int doeam, const char* potDir, const char* potName, const char* potType); +static SpeciesData* initSpecies(BasePotential* pot); +static Validate* initValidate(SimFlat* s); +static void validateResult(const Validate* val, SimFlat *sim); + +static void sumAtoms(SimFlat* s); +static void printThings(SimFlat* s, int iStep, double elapsedTime); +static void printSimulationDataYaml(FILE* file, SimFlat* s); +static void sanityChecks(Command cmd, double cutoff, double latticeConst, char latticeType[8]); + +#endif diff --git a/comd-cl/src-cl/CoMDTypes.h b/comd-cl/src-cl/CoMDTypes.h new file mode 100644 index 0000000..38d89de --- /dev/null +++ b/comd-cl/src-cl/CoMDTypes.h @@ -0,0 +1,97 @@ +/// \file +/// CoMD data structures. + +#ifndef __COMDTYPES_H_ +#define __COMDTYPES_H_ + +#include +#include "mytype.h" +#include "haloExchange.h" +#include "linkCells.h" +#include "decomposition.h" +#include "initAtoms.h" + +struct SimFlatSt; + +/// The base struct from which all potentials derive. Think of this as an +/// abstract base class. +/// +/// CoMD uses the following units: +/// - distance is in Angstroms +/// - energy is in eV +/// - time is in fs +/// - force in in eV/Angstrom +/// +/// The choice of distance, energy, and time units means that the unit +/// of mass is eV*fs^2/Angstrom^2. Hence, we must convert masses that +/// are input in AMU (atomic mass units) into internal mass units. +typedef struct BasePotentialSt +{ + real_t cutoff; //!< potential cutoff distance in Angstroms + real_t mass; //!< mass of atoms in intenal units + real_t lat; //!< lattice spacing (angs) of unit cell + char latticeType[8]; //!< lattice type, e.g. FCC, BCC, etc. + char name[3]; //!< element name + int atomicNo; //!< atomic number + int (*force)(struct SimFlatSt* s); //!< function pointer to force routine + void (*print)(FILE* file, struct BasePotentialSt* pot); + void (*destroy)(struct BasePotentialSt** pot); //!< destruction of the potential +} BasePotential; + + +/// species data: chosen to match the data found in the setfl/funcfl files +typedef struct SpeciesDataSt +{ + char name[3]; //!< element name + int atomicNo; //!< atomic number + real_t mass; //!< mass in internal units +} SpeciesData; + +/// Simple struct to store the initial energy and number of atoms. +/// Used to check energy conservation and atom conservation. +typedef struct ValidateSt +{ + double eTot0; // /dev/null + + +#-include .depend diff --git a/comd-cl/src-cl/atomsCL.c b/comd-cl/src-cl/atomsCL.c new file mode 100644 index 0000000..eebca09 --- /dev/null +++ b/comd-cl/src-cl/atomsCL.c @@ -0,0 +1,289 @@ +#include "helpers.h" + +HostAtomsSoa* initHostAtomsSoa(SimFlat* sim) +{ + HostAtomsSoa* atoms; + + atoms = malloc(sizeof(HostAtomsSoa)); + + atoms->nLocal = sim->atoms->nLocal; + atoms->nGlobal = sim->atoms->nGlobal; + + atoms->totalRealSize = MAXATOMS*sim->boxes->nTotalBoxes*sizeof(cl_real); + atoms->localRealSize = MAXATOMS*sim->boxes->nLocalBoxes*sizeof(cl_real); + atoms->haloRealSize = MAXATOMS*sim->boxes->nHaloBoxes*sizeof(cl_real); + + atoms->totalIntSize = MAXATOMS*sim->boxes->nTotalBoxes*sizeof(cl_int); + atoms->localIntSize = MAXATOMS*sim->boxes->nLocalBoxes*sizeof(cl_int); + atoms->haloIntSize = MAXATOMS*sim->boxes->nHaloBoxes*sizeof(cl_int); + + atoms->gid = malloc(atoms->totalIntSize); + atoms->iSpecies = malloc(atoms->totalIntSize); + + // location + atoms->r.x = malloc(atoms->totalRealSize); + atoms->r.y = malloc(atoms->totalRealSize); + atoms->r.z = malloc(atoms->totalRealSize); + + // momenta + atoms->p.x = malloc(atoms->totalRealSize); + atoms->p.y = malloc(atoms->totalRealSize); + atoms->p.z = malloc(atoms->totalRealSize); + + // forces + atoms->f.x = malloc(atoms->totalRealSize); + atoms->f.y = malloc(atoms->totalRealSize); + atoms->f.z = malloc(atoms->totalRealSize); + + // energy + atoms->U = malloc(atoms->totalRealSize); + + // at initialization time, copy all the atoms (local and halo) + // into the hostSim->atoms struct + atomsToSoa(sim, atoms); + + return atoms; +} + +void atomsToSoa(SimFlat* sim, HostAtomsSoa* atoms) +{ + atoms->nLocal = sim->atoms->nLocal; + atoms->nGlobal = sim->atoms->nGlobal; + + for (int iBox=0;iBoxboxes->nTotalBoxes;iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + int iOff = iBox*MAXATOMS + iAtom; + + atoms->gid[iOff] = sim->atoms->gid[iOff]; + atoms->iSpecies[iOff] = sim->atoms->iSpecies[iOff]; + + atoms->r.x[iOff] = sim->atoms->r[iOff][0]; + atoms->r.y[iOff] = sim->atoms->r[iOff][1]; + atoms->r.z[iOff] = sim->atoms->r[iOff][2]; + + atoms->p.x[iOff] = sim->atoms->p[iOff][0]; + atoms->p.y[iOff] = sim->atoms->p[iOff][1]; + atoms->p.z[iOff] = sim->atoms->p[iOff][2]; + + //atoms->f.x[iOff] = sim->atoms->f[iOff][0]; + //atoms->f.y[iOff] = sim->atoms->f[iOff][1]; + //atoms->f.z[iOff] = sim->atoms->f[iOff][2]; + + atoms->U[iOff] = sim->atoms->U[iOff]; + } + } +} + +void atomsToSim(SimFlat* sim, HostAtomsSoa* atoms) +{ + for (int iBox=0;iBoxboxes->nTotalBoxes;iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + int iOff = iBox*MAXATOMS + iAtom; + + sim->atoms->gid[iOff] = atoms->gid[iOff]; + sim->atoms->iSpecies[iOff] = atoms->iSpecies[iOff]; + + sim->atoms->r[iOff][0] = atoms->r.x[iOff]; + sim->atoms->r[iOff][1] = atoms->r.y[iOff]; + sim->atoms->r[iOff][2] = atoms->r.z[iOff]; + + sim->atoms->p[iOff][0] = atoms->p.x[iOff]; + sim->atoms->p[iOff][1] = atoms->p.y[iOff]; + sim->atoms->p[iOff][2] = atoms->p.z[iOff]; + + //sim->atoms->f[iOff][0] = atoms->f.x[iOff]; + //sim->atoms->f[iOff][1] = atoms->f.y[iOff]; + //sim->atoms->f[iOff][2] = atoms->f.z[iOff]; + + sim->atoms->U[iOff] = atoms->U[iOff]; + } + } +} + +void createDevAtomsSoa(DevAtomsSoa* atoms, HostAtomsSoa* hostAtoms) +{ + atoms->nLocal = hostAtoms->nLocal; + atoms->nGlobal = hostAtoms->nGlobal; + + oclCreateReadWriteBuffer(&atoms->gid, hostAtoms->totalIntSize); + oclCreateReadWriteBuffer(&atoms->iSpecies, hostAtoms->totalIntSize); + + // positions, momenta, force + createDevVec(&atoms->r, hostAtoms->totalRealSize); + createDevVec(&atoms->p, hostAtoms->totalRealSize); + createDevVec(&atoms->f, hostAtoms->totalRealSize); + + // particle energy + oclCreateReadWriteBuffer(&atoms->U, hostAtoms->totalRealSize); + +} + +void putAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa* devAtoms) +{ + putVec(hostAtoms->r, devAtoms->r, hostAtoms->totalRealSize, 0); + putVec(hostAtoms->p, devAtoms->p, hostAtoms->totalRealSize, 0); + putVec(hostAtoms->f, devAtoms->f, hostAtoms->totalRealSize, 0); + + oclCopyToDevice(hostAtoms->gid, devAtoms->gid, hostAtoms->totalIntSize, 0); + oclCopyToDevice(hostAtoms->iSpecies, devAtoms->iSpecies, hostAtoms->totalIntSize, 0); +} + +void getAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa* devAtoms) +{ + getVec(devAtoms->r, hostAtoms->r, hostAtoms->totalRealSize, 0); + getVec(devAtoms->p, hostAtoms->p, hostAtoms->totalRealSize, 0); + getVec(devAtoms->f, hostAtoms->f, hostAtoms->totalRealSize, 0); + + oclCopyToHost(devAtoms->gid, hostAtoms->gid, hostAtoms->totalIntSize, 0); + oclCopyToHost(devAtoms->iSpecies, hostAtoms->iSpecies, hostAtoms->totalIntSize, 0); +} + +HostAtomsAos* initHostAtomsAos(SimFlat* sim) +{ + HostAtomsAos* atoms; + + atoms = malloc(sizeof(HostAtomsAos)); + + atoms->nLocal = sim->atoms->nLocal; + atoms->nGlobal = sim->atoms->nGlobal; + + atoms->totalRealSize = MAXATOMS*sim->boxes->nTotalBoxes*sizeof(cl_real); + atoms->localRealSize = MAXATOMS*sim->boxes->nLocalBoxes*sizeof(cl_real); + + // location + atoms->r = malloc(atoms->totalRealSize*r3); + // momenta + atoms->p = malloc(atoms->totalRealSize*r3); + // forces + atoms->f = malloc(atoms->totalRealSize*r3); + // energy + atoms->U = malloc(atoms->totalRealSize); + + for (int iBox=0;iBoxboxes->nLocalBoxes;iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + int iOff = iBox*MAXATOMS + iAtom; +#if (defined (__APPLE__) || defined(MACOSX)) && (APPLE_OCL_10) + atoms->r[iOff][0] = sim->atoms->r[iOff][0]; + atoms->r[iOff][1] = sim->atoms->r[iOff][1]; + atoms->r[iOff][2] = sim->atoms->r[iOff][2]; + + atoms->p[iOff][0] = sim->atoms->p[iOff][0]; + atoms->p[iOff][1] = sim->atoms->p[iOff][1]; + atoms->p[iOff][2] = sim->atoms->p[iOff][2]; + + atoms->f[iOff][0] = sim->atoms->f[iOff][0]; + atoms->f[iOff][1] = sim->atoms->f[iOff][1]; + atoms->f[iOff][2] = sim->atoms->f[iOff][2]; +#else + atoms->r[iOff].s[0] = sim->atoms->r[iOff][0]; + atoms->r[iOff].s[1] = sim->atoms->r[iOff][1]; + atoms->r[iOff].s[2] = sim->atoms->r[iOff][2]; + + atoms->p[iOff].s[0] = sim->atoms->p[iOff][0]; + atoms->p[iOff].s[1] = sim->atoms->p[iOff][1]; + atoms->p[iOff].s[2] = sim->atoms->p[iOff][2]; + + atoms->f[iOff].s[0] = sim->atoms->f[iOff][0]; + atoms->f[iOff].s[1] = sim->atoms->f[iOff][1]; + atoms->f[iOff].s[2] = sim->atoms->f[iOff][2]; +#endif + } + } + return atoms; +} + +void createDevAtomsAos(DevAtomsAos* atoms, HostAtomsAos* hostAtoms) +{ + atoms->nLocal = hostAtoms->nLocal; + atoms->nGlobal = hostAtoms->nGlobal; + + // positions, momenta, force + oclCreateReadWriteBuffer(&atoms->r, hostAtoms->totalRealSize*r3); + oclCreateReadWriteBuffer(&atoms->p, hostAtoms->totalRealSize*r3); + oclCreateReadWriteBuffer(&atoms->f, hostAtoms->totalRealSize*r3); + + // particle energy + oclCreateReadWriteBuffer(&atoms->U, hostAtoms->totalRealSize); + + oclCreateReadWriteBuffer(&atoms->gid, hostAtoms->totalIntSize); + oclCreateReadWriteBuffer(&atoms->iSpecies, hostAtoms->totalIntSize); + +} + +void putAtomsAos(HostAtomsAos* hostAtoms, DevAtomsAos* devAtoms) +{ + oclCopyToDevice(hostAtoms->r, devAtoms->r, hostAtoms->totalRealSize*r3, 0); + oclCopyToDevice(hostAtoms->p, devAtoms->p, hostAtoms->totalRealSize*r3, 0); + oclCopyToDevice(hostAtoms->f, devAtoms->f, hostAtoms->totalRealSize*r3, 0); +} + +void freeAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa devAtoms) +{ + free(hostAtoms->r.x); + free(hostAtoms->r.y); + free(hostAtoms->r.z); + + free(hostAtoms->p.x); + free(hostAtoms->p.y); + free(hostAtoms->p.z); + + free(hostAtoms->f.x); + free(hostAtoms->f.y); + free(hostAtoms->f.z); + + free(hostAtoms->U); + free(hostAtoms->gid); + free(hostAtoms->iSpecies); + + clReleaseMemObject(devAtoms.r.x); + clReleaseMemObject(devAtoms.r.y); + clReleaseMemObject(devAtoms.r.z); + + clReleaseMemObject(devAtoms.p.x); + clReleaseMemObject(devAtoms.p.y); + clReleaseMemObject(devAtoms.p.z); + + clReleaseMemObject(devAtoms.f.x); + clReleaseMemObject(devAtoms.f.y); + clReleaseMemObject(devAtoms.f.z); + + clReleaseMemObject(devAtoms.U); + clReleaseMemObject(devAtoms.gid); + clReleaseMemObject(devAtoms.iSpecies); + +} + +void freeAtomsAos(HostAtomsAos* hostAtoms, DevAtomsAos devAtoms) +{ + free(hostAtoms->r); + free(hostAtoms->p); + free(hostAtoms->f); + free(hostAtoms->U); + free(hostAtoms->gid); + free(hostAtoms->iSpecies); + + clReleaseMemObject(devAtoms.r); + clReleaseMemObject(devAtoms.p); + clReleaseMemObject(devAtoms.f); + clReleaseMemObject(devAtoms.U); + clReleaseMemObject(devAtoms.gid); + clReleaseMemObject(devAtoms.iSpecies); +} + +void putHaloAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa* devAtoms) +{ + putVec(hostAtoms->r, devAtoms->r, hostAtoms->haloRealSize, hostAtoms->localRealSize); + putVec(hostAtoms->p, devAtoms->p, hostAtoms->haloRealSize, hostAtoms->localRealSize); +} + +void putHaloAtomsAos(HostAtomsAos* hostAtoms, DevAtomsAos* devAtoms) +{ + oclCopyToDevice(hostAtoms->r, devAtoms->r, hostAtoms->haloRealSize*r3, hostAtoms->localRealSize*r3); + oclCopyToDevice(hostAtoms->p, devAtoms->p, hostAtoms->haloRealSize*r3, hostAtoms->localRealSize*r3); +} diff --git a/comd-cl/src-cl/atomsCL.h b/comd-cl/src-cl/atomsCL.h new file mode 100644 index 0000000..d4f0d18 --- /dev/null +++ b/comd-cl/src-cl/atomsCL.h @@ -0,0 +1,112 @@ +#ifndef ATOMSCL_H +#define ATOMSCL_H + +#include "clTypes.h" +#include "cl_utils.h" +//#include "ComDTypes.h" +#include "CoMDTypes.h" + +typedef struct HostAtomsSoaSt +{ + cl_int nLocal; + cl_int nGlobal; + + cl_int* gid; + cl_int* iSpecies; + + HostVec r; + HostVec p; + HostVec f; + cl_real* U; + + int totalRealSize; + int localRealSize; + int haloRealSize; + + int totalIntSize; + int localIntSize; + int haloIntSize; + +} HostAtomsSoa; + +typedef struct HostAtomsAosSt +{ + cl_int nLocal; + cl_int nGlobal; + + cl_int* gid; + cl_int* iSpecies; + + cl_real4* r; + cl_real4* p; + cl_real4* f; + cl_real* U; + + int totalRealSize; + int localRealSize; + int haloRealSize; + + int totalIntSize; + int localIntSize; + int haloIntSize; + +} HostAtomsAos; + +typedef struct DevAtomsSoaSt +{ + cl_int nLocal; + cl_int nGlobal; + + cl_mem gid; + cl_mem iSpecies; + + DevVec r; + DevVec p; + DevVec f; + cl_mem U; + +} DevAtomsSoa; + +typedef struct DevAtomsAosSt +{ + cl_int nLocal; + cl_int nGlobal; + + cl_mem gid; + cl_mem iSpecies; + + cl_mem r; + cl_mem p; + cl_mem f; + cl_mem U; + +} DevAtomsAos; + +HostAtomsSoa* initHostAtomsSoa(SimFlat* sim); + +void createDevAtomsSoa(DevAtomsSoa* atoms, HostAtomsSoa* hostAtoms); + +void putAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa* devAtoms); + +void getAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa* devAtoms); + +void freeAtomsAos(HostAtomsAos* hostAtoms, DevAtomsAos devAtoms); + +void putHaloAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa* devAtoms); + +void atomsToSoa(SimFlat* sim, HostAtomsSoa* atoms); + +void atomsToSim(SimFlat* sim, HostAtomsSoa* atoms); + +HostAtomsAos* initHostAtomsAos(SimFlat* sim); + +void createDevAtomsAos(DevAtomsAos* atoms, HostAtomsAos* hostAtoms); + +void putAtomsAos(HostAtomsAos* hostAtoms, DevAtomsAos* devAtoms); + +void freeAtomsSoa(HostAtomsSoa* hostAtoms, DevAtomsSoa devAtoms); + +void putHaloAtomsAos(HostAtomsAos* hostAtoms, DevAtomsAos* devAtoms); + +#endif + diff --git a/comd-cl/src-cl/clTypes.c b/comd-cl/src-cl/clTypes.c new file mode 100644 index 0000000..ce8e1b5 --- /dev/null +++ b/comd-cl/src-cl/clTypes.c @@ -0,0 +1,59 @@ +#include "helpers.h" + +void createDevVec(DevVec *aDev, int arraySize) +{ + oclCreateReadWriteBuffer(&aDev->x, arraySize); + oclCreateReadWriteBuffer(&aDev->y, arraySize); + oclCreateReadWriteBuffer(&aDev->z, arraySize); +} + +void getVecAos(cl_mem aDev, + cl_real4* aHost, + int arraySize, + int offset) +{ + oclCopyToHost(aDev, aHost, r3*arraySize, offset); +} + +void getVec(DevVec aDev, + HostVec aHost, + int arraySize, + int offset) +{ + oclCopyToHost(aDev.x, aHost.x, arraySize, offset); + oclCopyToHost(aDev.y, aHost.y, arraySize, offset); + oclCopyToHost(aDev.z, aHost.z, arraySize, offset); +} + +void getVector(cl_mem axDev, cl_mem ayDev, cl_mem azDev, + cl_real* axHost, cl_real* ayHost, cl_real* azHost, + int arraySize, + int offset) +{ + oclCopyToHost(axDev, axHost, arraySize, offset); + oclCopyToHost(ayDev, ayHost, arraySize, offset); + oclCopyToHost(azDev, azHost, arraySize, offset); +} + +void putVector( + cl_real* axHost, cl_real* ayHost, cl_real* azHost, + cl_mem axDev, cl_mem ayDev, cl_mem azDev, + int arraySize, + int offset) +{ + oclCopyToDevice(axHost, axDev, arraySize, offset); + oclCopyToDevice(ayHost, ayDev, arraySize, offset); + oclCopyToDevice(azHost, azDev, arraySize, offset); +} + +void putVec( + HostVec aHost, + DevVec aDev, + int arraySize, + int offset) +{ + oclCopyToDevice(aHost.x, aDev.x, arraySize, offset); + oclCopyToDevice(aHost.y, aDev.y, arraySize, offset); + oclCopyToDevice(aHost.z, aDev.z, arraySize, offset); +} + diff --git a/comd-cl/src-cl/clTypes.h b/comd-cl/src-cl/clTypes.h new file mode 100644 index 0000000..985daf0 --- /dev/null +++ b/comd-cl/src-cl/clTypes.h @@ -0,0 +1,35 @@ +#ifndef CLTYPES_H +#define CLTYPES_H + +#include "cl_utils.h" +#include "mytype.h" + +typedef struct HostVecSt +{ + cl_real* x; + cl_real* y; + cl_real* z; +} HostVec; + +typedef struct DevVecSt +{ + cl_mem x; + cl_mem y; + cl_mem z; +} DevVec; + +void createDevVec(DevVec *a_D, int arraySize); + +void getVector(cl_mem ax_D, cl_mem ay_D, cl_mem az_D, + cl_real* ax_H, cl_real* ay_H, cl_real* az_H, + int arraySize, int offset); + +void putVec(HostVec a_H, DevVec a_D, int arraySize, int offset); + +void putVector(cl_real* ax_H, cl_real* ay_H, cl_real* az_H, cl_mem ax_D, cl_mem ay_D, cl_mem az_D, int arraySize, int offset); + +void getVec(DevVec a_D, HostVec a_H, int arraySize, int offset); + +void getVecAos(cl_mem a_D, cl_real4* a_H, int arraySize, int offset); + +#endif diff --git a/comd-cl/src-cl/cl_utils.c b/comd-cl/src-cl/cl_utils.c new file mode 100644 index 0000000..3976c00 --- /dev/null +++ b/comd-cl/src-cl/cl_utils.c @@ -0,0 +1,608 @@ +#include +#include +#include +#include +#include + +#ifdef INTEROP_VIZ + +#if defined (__APPLE__) || defined(MACOSX) +#include +#include +#include +#include "OpenCL/cl.h" +#include "OpenCL/cl_gl.h" +#include "OpenCL/cl_gl_ext.h" +#include "OpenCL/cl_ext.h" +#include "OpenGL/CGLDevice.h" +#define GL_SHARING_EXTENSION "cl_APPLE_gl_sharing" +#else +#include +#include +#include "CL/cl_gl.h" +#endif + +#endif + +#include "cl_utils.h" +#include "yamlOutput.h" + +#define GPU 1 + +#if (RUNTIME_API) + +/* + typedef struct float4 + { + float x,y,z,w; + } float4; + typedef struct float3 + { + float x,y,z,w; + } float3; + */ + +cl_uint num_platforms; +cl_platform_id* platformId; +cl_device_id deviceId; +cl_context context; +cl_command_queue commandq; +cl_program program; +cl_uint num_devices; +cl_uint num_cpus; +cl_uint num_gpus; + +#endif + +static char * loadProgramSourceFromFile(const char *filename) +{ + struct stat statbuf; + FILE *fh; + char *source; + + fh = fopen(filename, "r"); + if (fh == 0) + return 0; + + stat(filename, &statbuf); + source = (char *) malloc(statbuf.st_size + 1); + fread(source, statbuf.st_size, 1, fh); + source[statbuf.st_size] = '\0'; + + return source; +} + +// given a file path, loads a program file and builds the program +int buildProgramFromFile(cl_program* program, + char* filename, + cl_context context, + cl_device_id deviceId) +{ + int err; + + // Load programs from separate kernels file + + printf("Loading program '%s'...\n", filename); + + char *source = loadProgramSourceFromFile(filename); + if(!source) + { + printf("Failed to load compute program from file!\n"); + return EXIT_FAILURE; + } + + // define the right type for the code + const char *srcPrec = "CL_REAL_T"; + const char *srcPrec4 = "CL_REAL4_T"; +#ifdef SINGLE + const char myPrec[128] = "float "; /* note padded with zeros to length of srcPrec */ + const char myPrec4[128] = "float4 "; /* note padded with zeros to length of srcPrec4 */ +#else + const char myPrec[128] = "double "; /* note padded with zeros to length of srcPrec */ + const char myPrec4[128] = "double4 "; /* note padded with zeros to length of srcPrec4 */ +#endif + char *mydef = source; + int rep_count = 0; + while((mydef = strstr(mydef,srcPrec4)) != NULL) + { + strncpy(mydef,myPrec4,strlen(srcPrec4)); + rep_count +=1; + } + mydef = source; + printf("Replaced %d instances of %s with %s in %s\n", rep_count, srcPrec4, myPrec4, filename); + while((mydef = strstr(mydef,srcPrec)) != NULL) + { + memcpy(mydef,myPrec,strlen(srcPrec)); + rep_count +=1; + } + printf("Replaced %d instances of %s with %s in %s\n", rep_count, srcPrec, myPrec, filename); + rep_count = 0; + + // Create the compute program from the source buffer + // + + *program = clCreateProgramWithSource(context, 1, (const char **) &source, NULL, &err); + if (!program || err != CL_SUCCESS) + { + printf("%s\n", source); + printf("Failed to create compute program!\n"); + return EXIT_FAILURE; + } + + // Build the program executable + // + char* OPT_STRING; +#if (USE_CHEBY) + OPT_STRING = "-DUSE_CHEBY=1"; +#else + OPT_STRING = "-DUSE_CHEBY=0"; +#endif + err = clBuildProgram(*program, 0, NULL, OPT_STRING, NULL, NULL); + if (err != CL_SUCCESS) + { + size_t len; + char buffer[2048]; + + printf("Failed to build program executable!\n"); + clGetProgramBuildInfo(*program, deviceId, CL_PROGRAM_BUILD_LOG, sizeof(buffer), buffer, &len); + printf("%s\n", buffer); + exit(1); + } + else + { + printf("Module %s built\n", filename); + } + return 0; +} + +#if (RUNTIME_API) +int oclInit(int gpu_request) +{ + int err = 0; + char device_name[80]; + + printf("************************************************************************\n"); + printf("Initializing OpenCL...\n"); + + // Query the number of platforms + err = clGetPlatformIDs(0, NULL, &num_platforms); + if (err != CL_SUCCESS) + { + printf("Failed to get number of platforms!\n"); + return EXIT_FAILURE; + } + else + { + printf("Found %d OpenCL platforms\n", num_platforms); + + platformId = (cl_platform_id*)malloc(num_platforms * sizeof(cl_platform_id)); + for (int i = 0; i < num_platforms; i++) + { + err = clGetPlatformIDs(num_platforms, &platformId[i], NULL); + if (err != CL_SUCCESS) + { + printf("Failed to get platform ID!\n"); + return EXIT_FAILURE; + } + } + } + + // Check for OpenCL capable CPUs + num_cpus = 0; + err = clGetDeviceIDs(platformId[0], CL_DEVICE_TYPE_CPU, 0, NULL, &num_cpus); + if (err != CL_SUCCESS) + { + printf("No OpenCL CPU devices available \n"); + } + else + { + printf("Found %d OpenCL CPUs on this platform\n", num_cpus); + } + + // Check for OpenCL capable GPUs + num_gpus = 0; + err = clGetDeviceIDs(platformId[0], CL_DEVICE_TYPE_GPU, 0, NULL, &num_gpus); + if (err != CL_SUCCESS) + { + printf("No OpenCL GPU devices available \n"); + } + else + { + + printf("Found %d OpenCL GPUs on this platform\n", num_gpus); + } + + // Set total number of OpenCL devices + num_devices = num_cpus + num_gpus; + + if (num_devices == 0) + { + printf("No OpenCL-capable devices are available\n"); + return 0; + } + + int usingGPU = 0; + if (gpu_request) + { // branch for request for GPU + if (num_gpus > 0) + { + + printf("Connecting to GPU as compute device\n"); + usingGPU = 1; + err = clGetDeviceIDs(platformId[0], CL_DEVICE_TYPE_GPU, 1, &deviceId, NULL); + if (err != CL_SUCCESS) + { + printf("Failed to create a device group!\n"); + return EXIT_FAILURE; + } + } + else + { + // If we asked for a GPU but none is available, let the user know + if (num_cpus > 0 ) + { + printf("****************************************\n"); + printf("*No GPUs available, falling back to CPU*\n"); + printf("****************************************\n"); + + err = clGetDeviceIDs(platformId[0], CL_DEVICE_TYPE_CPU, 1, &deviceId, NULL); + if (err != CL_SUCCESS) + { + printf("Failed to create a device group!\n"); + return EXIT_FAILURE; + } + } + } + } + else + {// branch for no GPU request + if (num_cpus > 0 ) + { + printf("Connecting to CPU as compute device\n"); + err = clGetDeviceIDs(platformId[0], CL_DEVICE_TYPE_CPU, 1, &deviceId, NULL); + if (err != CL_SUCCESS) + { + printf("Failed to create a device group!\n"); + return EXIT_FAILURE; + } + } + else + { + if (num_gpus > 0) + { + // If we asked for a CPU but none is available, let the user know + printf("****************************************\n"); + printf("*No CPUs available, falling back to GPU*\n"); + printf("****************************************\n"); + + usingGPU = 1; + err = clGetDeviceIDs(platformId[0], CL_DEVICE_TYPE_GPU, 1, &deviceId, NULL); + if (err != CL_SUCCESS) + { + printf("Failed to create a device group!\n"); + return EXIT_FAILURE; + } + } + } + } + + err = clGetDeviceInfo(deviceId , CL_DEVICE_NAME, 80*sizeof(char), &device_name, NULL); + printf("Device type is %s\n", device_name); + fprintf(yamlFile, "Device type is %s\n", device_name); + + cl_ulong global_mem_size; + err = clGetDeviceInfo(deviceId , CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &global_mem_size, NULL); + printf("Global memory size is %.2f GB\n", (float)global_mem_size/1024.0/1024.0/1024.0); + fprintf(yamlFile, " Global memory size is %.2f GB\n", (float)global_mem_size/1024.0/1024.0/1024.0); + + size_t max_work_group_size; + err = clGetDeviceInfo(deviceId , CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), &max_work_group_size, NULL); + printf("Maximum work group size is %lu \n", (max_work_group_size)); + fprintf(yamlFile, " Maximum work group size is %lu \n", (max_work_group_size)); + + cl_uint max_compute_units; + err = clGetDeviceInfo(deviceId , CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &max_compute_units, NULL); + printf("Maximum compute units is %u \n", (max_compute_units)); + fprintf(yamlFile, " Maximum compute units is %u \n", (max_compute_units)); + + cl_uint max_clock_freq; + err = clGetDeviceInfo(deviceId , CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(cl_uint), &max_clock_freq, NULL); + printf("Maximum clock freq is %u \n", (max_clock_freq)); + fprintf(yamlFile, " Maximum clock freq is %u \n", (max_clock_freq)); + + // Create a compute context + printf("Creating a compute context\n"); + +#ifdef INTEROP_VIZ + +#if defined (__APPLE__) || defined(MACOSX) + CGLContextObj kCGLContext = CGLGetCurrentContext(); + CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(kCGLContext); + cl_context_properties cpsGL[] = { CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup, 0 }; + + if (usingGPU == 1) context = clCreateContext(cpsGL, 0, 0, NULL, NULL, &err); + else context = clCreateContext(cpsGL, 1, &deviceId, NULL, NULL, &err); +#else + GLXContext gGlCtx = glXGetCurrentContext(); + cl_context_properties cpsGL[] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platformId[0], + CL_GLX_DISPLAY_KHR, (intptr_t) glXGetCurrentDisplay(), + CL_GL_CONTEXT_KHR, (intptr_t) gGlCtx, 0}; + context = clCreateContext(cpsGL, 1, &deviceId, NULL, NULL, &err); +#endif + +#else + context = clCreateContext(0, 1, &deviceId, NULL, NULL, &err); +#endif + + if (!context) + { + printf("Failed to create a compute context! %d\n", err); + return EXIT_FAILURE; + } + + // Create a command queue + printf("Creating a command queue\n"); + commandq = clCreateCommandQueue(context, deviceId, CL_QUEUE_PROFILING_ENABLE, &err); + if (!commandq) + { + printf("Failed to create a command queue!\n"); + return EXIT_FAILURE; + } + printf("Initialization done\n"); + return 0; +} + +// release program, commnand queue and then the context +int oclCleanup() +{ + printf("Cleaning up OpenCL..."); + clReleaseProgram(program); + clReleaseCommandQueue(commandq); + clReleaseContext(context); + printf("done\n"); + return 0; +} + +// given a file path, loads a program file and builds the program +int oclBuildProgramFromFile(char* filename) +{ + int err; + + // Load programs from separate kernels file + + printf("Loading program '%s'...\n", filename); + + char *source = loadProgramSourceFromFile(filename); + if(!source) + { + printf("Failed to load compute program from file!\n"); + return EXIT_FAILURE; + } + + // Create the compute program from the source buffer + // + program = clCreateProgramWithSource(context, 1, (const char **) & source, NULL, &err); + if (!program || err != CL_SUCCESS) + { + printf("%s\n", source); + printf("Failed to create compute program!\n"); + return EXIT_FAILURE; + } + + // Build the program executable + // + err = clBuildProgram(program, 0, NULL, NULL, NULL, NULL); + if (err != CL_SUCCESS) + { + size_t len; + char buffer[2048]; + + printf("Failed to build program executable!\n"); + clGetProgramBuildInfo(program, deviceId, CL_PROGRAM_BUILD_LOG, sizeof(buffer), buffer, &len); + printf("%s\n", buffer); + exit(1); + } + return 0; +} + +void oclCreateReadBuffer(cl_mem *device_buffer, int size) +{ + *device_buffer = clCreateBuffer(context, CL_MEM_READ_ONLY, size, NULL, NULL); + if (!device_buffer) + { + printf("Failed to allocate device memory!\n"); + exit(1); + } +} + +void oclCreateWriteBuffer(cl_mem *device_buffer, int size) +{ + *device_buffer = clCreateBuffer(context, CL_MEM_WRITE_ONLY, size, NULL, NULL); + if (!device_buffer) + { + printf("Failed to allocate device memory!\n"); + exit(1); + } +} + +void oclCreateReadWriteBuffer(cl_mem *device_buffer, int size) +{ + *device_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, NULL); + if (!device_buffer) + { + printf("Failed to allocate device memory!\n"); + exit(1); + } +} + +void oclCopyToDevice(void* host_buffer, cl_mem device_buffer, int size, int offset) +{ + int err = clEnqueueWriteBuffer(commandq, device_buffer, CL_TRUE, offset, size, host_buffer, 0, NULL, NULL); + if (err != CL_SUCCESS) + { + printf("Failed to write to device array!\n"); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } +} + +void oclCopyToHost(cl_mem device_buffer, void* host_buffer, int size, int offset) +{ + int err = clEnqueueReadBuffer(commandq, device_buffer, CL_TRUE, offset, size, host_buffer, 0, NULL, NULL); + if (err != CL_SUCCESS) + { + printf("Failed to write to host array!\n"); + exit(1); + } +} +#endif + +int ParseGPURequest(int argc, char* argv[]) +{ + // check to see if the command line asks for GPU, otherwise default to CPU + int gpu_request = 0; + if (argc > 1) + { + printf("%s\n", argv[1]); + gpu_request = atoi(argv[1]); + } + return gpu_request; +} + +char *print_cl_errstring(cl_int err) +{ + switch (err) + { + case CL_SUCCESS: return strdup("Success!"); + case CL_DEVICE_NOT_FOUND: return strdup("Device not found."); + case CL_DEVICE_NOT_AVAILABLE: return strdup("Device not available"); + case CL_COMPILER_NOT_AVAILABLE: return strdup("Compiler not available"); + case CL_MEM_OBJECT_ALLOCATION_FAILURE: return strdup("Memory object allocation failure"); + case CL_OUT_OF_RESOURCES: return strdup("Out of resources"); + case CL_OUT_OF_HOST_MEMORY: return strdup("Out of host memory"); + case CL_PROFILING_INFO_NOT_AVAILABLE: return strdup("Profiling information not available"); + case CL_MEM_COPY_OVERLAP: return strdup("Memory copy overlap"); + case CL_IMAGE_FORMAT_MISMATCH: return strdup("Image format mismatch"); + case CL_IMAGE_FORMAT_NOT_SUPPORTED: return strdup("Image format not supported"); + case CL_BUILD_PROGRAM_FAILURE: return strdup("Program build failure"); + case CL_MAP_FAILURE: return strdup("Map failure"); + case CL_INVALID_VALUE: return strdup("Invalid value"); + case CL_INVALID_DEVICE_TYPE: return strdup("Invalid device type"); + case CL_INVALID_PLATFORM: return strdup("Invalid platform"); + case CL_INVALID_DEVICE: return strdup("Invalid device"); + case CL_INVALID_CONTEXT: return strdup("Invalid context"); + case CL_INVALID_QUEUE_PROPERTIES: return strdup("Invalid queue properties"); + case CL_INVALID_COMMAND_QUEUE: return strdup("Invalid command queue"); + case CL_INVALID_HOST_PTR: return strdup("Invalid host pointer"); + case CL_INVALID_MEM_OBJECT: return strdup("Invalid memory object"); + case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: return strdup("Invalid image format descriptor"); + case CL_INVALID_IMAGE_SIZE: return strdup("Invalid image size"); + case CL_INVALID_SAMPLER: return strdup("Invalid sampler"); + case CL_INVALID_BINARY: return strdup("Invalid binary"); + case CL_INVALID_BUILD_OPTIONS: return strdup("Invalid build options"); + case CL_INVALID_PROGRAM: return strdup("Invalid program"); + case CL_INVALID_PROGRAM_EXECUTABLE: return strdup("Invalid program executable"); + case CL_INVALID_KERNEL_NAME: return strdup("Invalid kernel name"); + case CL_INVALID_KERNEL_DEFINITION: return strdup("Invalid kernel definition"); + case CL_INVALID_KERNEL: return strdup("Invalid kernel"); + case CL_INVALID_ARG_INDEX: return strdup("Invalid argument index"); + case CL_INVALID_ARG_VALUE: return strdup("Invalid argument value"); + case CL_INVALID_ARG_SIZE: return strdup("Invalid argument size"); + case CL_INVALID_KERNEL_ARGS: return strdup("Invalid kernel arguments"); + case CL_INVALID_WORK_DIMENSION: return strdup("Invalid work dimension"); + case CL_INVALID_WORK_GROUP_SIZE: return strdup("Invalid work group size"); + case CL_INVALID_WORK_ITEM_SIZE: return strdup("Invalid work item size"); + case CL_INVALID_GLOBAL_OFFSET: return strdup("Invalid global offset"); + case CL_INVALID_EVENT_WAIT_LIST: return strdup("Invalid event wait list"); + case CL_INVALID_EVENT: return strdup("Invalid event"); + case CL_INVALID_OPERATION: return strdup("Invalid operation"); + case CL_INVALID_GL_OBJECT: return strdup("Invalid OpenGL object"); + case CL_INVALID_BUFFER_SIZE: return strdup("Invalid buffer size"); + case CL_INVALID_MIP_LEVEL: return strdup("Invalid mip-map level"); + default: return strdup("Unknown"); + } +} + +// Queries the total number of OpenCL platforms available. +// Then creates a list of platforms, and for each platform, prints the name. +// Creates a context and command queue for the chosen device. +int initCL(cl_uint* num_platforms, + cl_platform_id* platformId, + cl_device_id* deviceId, + cl_context* context, + cl_command_queue* commandq) +{ + int err = 0; + char device_name[80]; + + printf("Connecting to compute devices\n"); + + // Connect to a compute device + // + err = clGetPlatformIDs(0, NULL, num_platforms); + if (err != CL_SUCCESS) + { + printf("Failed to get number of platforms!\n"); + return EXIT_FAILURE; + } + else + { + printf("Found %d OpenCL platforms\n", *num_platforms); + + platformId = (cl_platform_id*)malloc(*num_platforms * sizeof(cl_platform_id)); + for (int i = 0; i < *num_platforms; i++) + { + err = clGetPlatformIDs(*num_platforms, &platformId[i], NULL); + if (err != CL_SUCCESS) + { + printf("Failed to get platform ID!\n"); + return EXIT_FAILURE; + } + } + } + + err = clGetDeviceIDs(platformId[0], GPU ? CL_DEVICE_TYPE_GPU : CL_DEVICE_TYPE_CPU, 0, NULL, &num_devices); + if (err != CL_SUCCESS) + { + printf("No CPU devices available \n"); + } + printf("Found %d devices on this platform\n", num_devices); + + + err = clGetDeviceIDs(platformId[0], GPU ? CL_DEVICE_TYPE_GPU : CL_DEVICE_TYPE_CPU, 1, deviceId, NULL); + if (err != CL_SUCCESS) + { + printf("Failed to create a device group!\n"); + return EXIT_FAILURE; + } + + err = clGetDeviceInfo(*deviceId , CL_DEVICE_NAME, 80*sizeof(char), &device_name, NULL); + + printf("Device type is %s\n", device_name); + + // Create a compute context + // + *context = clCreateContext(0, 1, deviceId, NULL, NULL, &err); + if (!context) + { + printf("Failed to create a compute context!\n"); + return EXIT_FAILURE; + } + + // Create a command queue + // + *commandq = clCreateCommandQueue(*context, *deviceId, CL_QUEUE_PROFILING_ENABLE, &err); + if (!commandq) + { + printf("Failed to create a command queue!\n"); + return EXIT_FAILURE; + } + if (err != CL_SUCCESS) + { + printf("Failed to create a command queue!\n"); + return EXIT_FAILURE; + } + return 0; +} + + diff --git a/comd-cl/src-cl/cl_utils.h b/comd-cl/src-cl/cl_utils.h new file mode 100644 index 0000000..c2ec189 --- /dev/null +++ b/comd-cl/src-cl/cl_utils.h @@ -0,0 +1,78 @@ +#define RUNTIME_API 1 + +#ifndef CL_UTILS_H +#define CL_UTILS_H + +#include +#include +#include + +#if defined (__APPLE__) || defined(MACOSX) +#include +#else +#include +#endif + +#include "mytype.h" + +#ifdef SINGLE +#define cl_real cl_float +#define cl_real4 cl_float4 +#else +#define cl_real cl_double +#define cl_real4 cl_double4 +#endif + +// sizes of 3 and 4-vectors, respectively, (which might be padded) +#define r3 4 +#define r4 4 + +// OpenCL stuff to make syntax simpler for 'Runtime API' constructs +// +#if (RUNTIME_API) + +extern cl_uint num_platforms; +extern cl_platform_id* platformId; +extern cl_device_id deviceId; +extern cl_context context; +extern cl_command_queue commandq; +extern cl_program program; + +extern int oclInit(int gpu_request); + +extern void oclInitInterop(); + +extern int oclCleanup(); + +extern int oclBuildProgramFromFile(char* filename); + +extern void oclCreateReadBuffer(cl_mem* device_buffer, int size); + +extern void oclCreateWriteBuffer(cl_mem* device_buffer, int size); + +extern void oclCreateReadWriteBuffer(cl_mem* device_buffer, int size); + +extern void oclCopyToDevice(void* host_buffer, cl_mem device_buffer, int size, int offset); + +extern void oclCopyToHost(cl_mem device_buffer, void* host_buffer, int size, int offset); + +#else + +extern int InitCL(cl_uint* num_platforms, + cl_platform_id* platformId, + cl_device_id* deviceId, + cl_context* context, + cl_command_queue* commandq); + +#endif + +extern int buildProgramFromFile(cl_program* program, + char* filename, + cl_context context, + cl_device_id deviceId); + +int ParseGPURequest(int argc, char* argv[]); + +extern char* print_cl_errstring(int err); + +#endif diff --git a/comd-cl/src-cl/cmdLineParser.c b/comd-cl/src-cl/cmdLineParser.c new file mode 100644 index 0000000..79bf0ea --- /dev/null +++ b/comd-cl/src-cl/cmdLineParser.c @@ -0,0 +1,228 @@ +/// \file +/// A parser for command line arguments. +/// +/// A general purpose command line parser that uses getopt_long() to parse +/// the command line. +/// +/// \author Sriram Swaminarayan +/// \date July 24, 2007 + +#include "cmdLineParser.h" + +#include +#include +#include + +#include "mytype.h" +#include "memUtils.h" + +#define nextOption(o) ((MyOption*) o->next) + +typedef struct MyOptionSt +{ + char* help; + char* longArg; + unsigned char shortArg[2]; + int argFlag; + char type; + int sz; + void* ptr; + void* next; +} MyOption; + +static int longest = 1; +static MyOption* myargs=NULL; + +static char* dupString(const char* s) +{ + char* d; + if ( ! s ) s = ""; + d = (char*)comdCalloc((strlen(s)+1),sizeof(char)); + strcpy(d, s); + return d; +} + +static MyOption* myOptionAlloc( + const char* longOption, const char shortOption, + int has_arg, const char type, void* dataPtr, int dataSize, const char* help) +{ + static int iBase=129; + MyOption* o = (MyOption*)comdCalloc(1, sizeof(MyOption)); + o->help = dupString(help); + o->longArg = dupString(longOption); + if(shortOption) o->shortArg[0] = (unsigned char)shortOption; + else + { + o->shortArg[0] = iBase; + iBase++; + } + o->argFlag = has_arg; + o->type = type; + o->ptr = dataPtr; + o->sz = dataSize; + if(longOption) longest = (longest>strlen(longOption)?longest:strlen(longOption)); + return o; +} + +static MyOption* myOptionFree(MyOption* o) +{ + MyOption* r; + if(!o) return NULL; + r = nextOption(o); + if(o->longArg)free(o->longArg); + if(o->help)free(o->help); + free(o); + return r; +} + +static MyOption* lastOption(MyOption* o) +{ + if ( ! o) return o; + while(nextOption(o)) o = nextOption(o); + return o; +} + +static MyOption* findOption(MyOption* o, unsigned char shortArg) +{ + while(o) + { + if (o->shortArg[0] == shortArg) return o; + o = nextOption(o); + } + return o; +} + + +int addArg(const char* longOption, const char shortOption, + int has_arg, const char type, void* dataPtr, int dataSize, + const char* help) +{ + MyOption* o; + MyOption* p; + o = myOptionAlloc(longOption,shortOption,has_arg,type,dataPtr,dataSize, help); + if ( ! o ) return 1; + if ( ! myargs) myargs = o; + else + { + p = lastOption(myargs); + p->next = (void *)o; + } + return 0; +} + + +void freeArgs() +{ + while(myargs) + { + myargs = myOptionFree(myargs); + } + return; +} + +void printArgs() +{ + MyOption* o = myargs; + char s[4096]; + unsigned char *shortArg; + fprintf(screenOut,"\n" + " Arguments are: \n"); + sprintf(s," --%%-%ds",longest); + while(o) + { + if(o->shortArg[0]<0xFF) shortArg = o->shortArg; + else shortArg = (unsigned char *) "---"; + fprintf(screenOut,s,o->longArg); + fprintf(screenOut," -%c arg=%1d type=%c %s\n",shortArg[0],o->argFlag,o->type,o->help); + o = nextOption(o); + + } + fprintf(screenOut,"\n\n"); + return; +} + +void processArgs(int argc, char** argv) +{ + MyOption* o; + int n=0; + int i; + struct option* opts; + char* sArgs; + int c; + + if ( ! myargs) return; + o = myargs; + while(o) + {n++,o=nextOption(o);} + + o = myargs; + sArgs= (char*)comdCalloc(2*(n+2),sizeof(char)); + opts = (struct option*)comdCalloc(n,sizeof(struct option)); + for (i=0; ilongArg; + opts[i].has_arg = o->argFlag; + opts[i].flag = 0; + opts[i].val = o->shortArg[0]; + + strcat(sArgs,(char*) o->shortArg); + if(o->argFlag) strcat(sArgs,":"); + o = nextOption(o); + } + + while(1) + { + + int option_index = 0; + + c = getopt_long (argc, argv, sArgs, opts, &option_index); + if ( c == -1) break; + o = findOption(myargs,c); + if ( ! o ) + { + fprintf(screenOut,"\n\n" + " invalid switch : -%c in getopt()\n" + "\n\n", + c); + break; + } + if(! o->argFlag) + { + int* i = (int*)o->ptr; + *i = 1; + } + else + { + switch(o->type) + { + case 'i': + sscanf(optarg,"%d",(int*)o->ptr); + break; + case 'f': + sscanf(optarg,"%f",(float*)o->ptr); + break; + case 'd': + sscanf(optarg,"%lf",(double*)o->ptr); + break; + case 's': + strncpy((char*)o->ptr,(char*)optarg,o->sz); + ((char*)o->ptr)[o->sz-1] = '\0'; + break; + case 'c': + sscanf(optarg,"%c",(char*)o->ptr); + break; + default: + fprintf(screenOut,"\n\n" + " invalid type : %c in getopt()\n" + " valid values are 'e', 'z'. 'i','d','f','s', and 'c'\n" + "\n\n", + c); + } + } + } + + free(opts); + free(sArgs); + + return; +} diff --git a/comd-cl/src-cl/cmdLineParser.h b/comd-cl/src-cl/cmdLineParser.h new file mode 100644 index 0000000..69e533f --- /dev/null +++ b/comd-cl/src-cl/cmdLineParser.h @@ -0,0 +1,40 @@ +/// \file +/// A parser for command line arguments. +/// +/// \author Sriram Swaminarayan +/// \date July 24, 2007 + +#ifndef CMDLINEPARSER_H_ +#define CMDLINEPARSER_H_ + +/// Specifies a command line argument that should be accepted by the program. +/// \param [in] longOption The long name of option i.e., --optionname +/// \param [in] shortOption The short name of option i.e., -o +/// \param [in] has_arg Whether this option has an argument i.e., -o value. +/// If has_arg is 0, then dataPtr must be an integer +/// pointer. +/// \param [in] type The type of the argument. Valid values are: +/// - i integer +/// - f float +/// - d double +/// - s string +/// - c character +/// +/// \param [in] dataPtr A pointer to where the value will be stored. +/// \param [in] dataSize The length of dataPtr, only useful for character +/// strings. +/// \param [in] help A short help string, preferably a single line or +/// less. +int addArg(const char *longOption, const char shortOption, + int has_arg, const char type, void *dataPtr, int dataSize, + const char *help); + +/// Call this to process your arguments. +void processArgs(int argc, char **argv); + +/// Prints the arguments to the stdout stream. +void printArgs(void); + +void freeArgs(void); + +#endif diff --git a/comd-cl/src-cl/computeOCL.c b/comd-cl/src-cl/computeOCL.c new file mode 100644 index 0000000..168901a --- /dev/null +++ b/comd-cl/src-cl/computeOCL.c @@ -0,0 +1,323 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +/** + * a simple md simulator + **/ +#include "computeOCL.h" + +#include +#include +#include +#include +#include + +#include "mytype.h" +#include "helpers.h" +#include "yamlOutput.h" +#include "memUtils.h" +#include "timestep.h" +#include "performanceTimers.h" + +cl_kernel vizSoa; + +cl_kernel advanceVelocityAos; +cl_kernel advancePositionAos; +cl_kernel vizAos; +cl_kernel *forceKernelsAos; + +real_t tExec; +real_t tOverall; +real_t tLocal; + +int iter; +int nIter; + +void printLine() +{ + printf("********************************************************************************\n"); +} + + +OclSimSoa* initOclSimSoa(SimFlat* sim, Command cmd) +{ + OclSimSoa* oclSim = malloc(sizeof(OclSimSoa)); + + oclSim->eamFlag = cmd.doeam; + oclSim->gpuFlag = cmd.useGpu; + + if(oclSim->eamFlag) + { + oclSim->forceKernels = malloc(sizeof(cl_kernel)*3); + } + else + { + oclSim->forceKernels = malloc(sizeof(cl_kernel)*1); + } + oclSim->advanceVelocity = malloc(sizeof(cl_kernel)); + oclSim->advancePosition = malloc(sizeof(cl_kernel)); + oclSim->pfxKernel = malloc(sizeof(cl_kernel)); + + HostSimSoa* hostSim = initHostSimSoa(sim, oclSim->eamFlag); + DevSimSoa* devSim = initDevSimSoa(hostSim); + putSimSoa(hostSim, devSim); + + oclSim->hostSim = hostSim; + oclSim->devSim = devSim; + + buildModulesSoa(oclSim, &vizSoa); + + cl_real dthalf = 0.5*hostSim->dt; + cl_real dtminushalf = -0.5*hostSim->dt; + + if (oclSim->eamFlag) + { + // set the arguments for all 3 EAM_Force kernels + setEamArgsSoa(oclSim->forceKernels, devSim); + } + else + { + // set kernel arguments for ljForce + setLjArgsSoa(oclSim->forceKernels[0], devSim); + } + + // set kernel arguments for advanceVelocitySoa + setAvArgsSoa(*oclSim->advanceVelocity, devSim, dthalf); + + // set kernel arguments for advancePosition + setApArgsSoa(*oclSim->advancePosition, devSim, hostSim->dt); + + // set kernel arguments for pfxBoxes + setPfxArgsSoa(*oclSim->pfxKernel, devSim); + + // Start the simulation here; + printLine(); + printf("Starting SoA OpenCL simulation\n"); + + //ts = timeNow(); + + computeReductionBoxes(sim->boxes->nAtoms, sim->boxes->nLocalBoxes, oclSim->devSim->boxes.nAtomsPfx, *(oclSim->pfxKernel)); + + cl_real tKern; + computeForceOcl(oclSim->gForce, oclSim->lForce, &tKern, oclSim, sim); + + getVec(devSim->atoms.f, hostSim->atoms->f, hostSim->atoms->totalRealSize, 0); + + //if (DIAG_LEVEL > 1) + getPrintStateSoa(devSim, hostSim); + + return oclSim; + +} + +void computeIterationSoa2(SimFlat* sim, OclSimSoa* oclSim) +{ + real_t tKern, tEnq; + real_t tAcc = 0.0; + int nSteps = sim->printRate; + + for (int iStep = 0;iStep < nSteps; iStep++) + { + + startTimer(oclTimestep); + // advance velocity a half timestep + startTimer(oclVelocity); + oclRunKernel(*oclSim->advanceVelocity, &oclSim->avEvent, oclSim->gVelocity, oclSim->lVelocity); + clWaitForEvents(1, &oclSim->avEvent); + stopTimer(oclVelocity); + clGetElapsedTime(oclSim->avEvent, &tKern, &tEnq); + tAcc += tKern; + + if (DIAG_LEVEL > 1) + { + printf("After first velocity substep\n"); + getPrintStateSoa(oclSim->devSim, oclSim->hostSim); + } + + // advance particle positions a full timestep + startTimer(oclPosition); + oclRunKernel(*oclSim->advancePosition, &oclSim->apEvent, oclSim->gPosition, oclSim->lPosition); + clWaitForEvents(1, &oclSim->apEvent); + stopTimer(oclPosition); + clGetElapsedTime(oclSim->apEvent, &tKern, &tEnq); + tAcc += tKern; + + if (DIAG_LEVEL > 1) + { + printf("After position substep\n"); + getPrintStateSoa(oclSim->devSim, oclSim->hostSim); + } + + startTimer(oclCopy); + // copy atom info back to base sim + // note that atom ownership and link cell occupancy are unchanged + getAtomsSoa(oclSim->hostSim->atoms, &oclSim->devSim->atoms); + stopTimer(oclCopy); + startTimer(oclRedistribute); + atomsToSim(sim, oclSim->hostSim->atoms); + + // for now this uses the base sim for redistribution + redistributeAtoms(sim); + + // need to update the atom counts for the link cells + for (int iBox=0; iBoxboxes->nTotalBoxes; iBox++) + { + oclSim->hostSim->boxes->nAtoms[iBox] = sim->boxes->nAtoms[iBox]; + } + oclCopyToDevice(oclSim->hostSim->boxes->nAtoms, oclSim->devSim->boxes.nAtoms, oclSim->hostSim->boxes->nTotalBoxesIntSize, 0); + + // copy the redistributed atom info to the device + atomsToSoa(sim, oclSim->hostSim->atoms); + stopTimer(oclRedistribute); + startTimer(oclCopy); + putAtomsSoa(oclSim->hostSim->atoms, &oclSim->devSim->atoms); + stopTimer(oclCopy); + + computeReductionBoxes(sim->boxes->nAtoms, sim->boxes->nLocalBoxes, oclSim->devSim->boxes.nAtomsPfx, *(oclSim->pfxKernel)); + + // compute force + startTimer(oclForce); + computeForceOcl(oclSim->gForce, oclSim->lForce, &tKern, oclSim, sim); + stopTimer(oclForce); + tAcc += tKern; + + if (DIAG_LEVEL > 1) + getPrintStateSoa(oclSim->devSim, oclSim->hostSim); + + // advance velocity a half timestep + startTimer(oclVelocity); + oclRunKernel(*oclSim->advanceVelocity, &oclSim->avEvent, oclSim->gVelocity, oclSim->lVelocity); + clWaitForEvents(1, &oclSim->avEvent); + stopTimer(oclVelocity); + clGetElapsedTime(oclSim->avEvent, &tKern, &tEnq); + tAcc += tKern; + + if (DIAG_LEVEL > 1) + { + printf("After second velocity substep\n"); + getPrintStateSoa(oclSim->devSim, oclSim->hostSim); + } + stopTimer(oclTimestep); + } + +#ifdef INTEROP_VIZ + oclGraphics(vizSoa, oclSim->devSim, nGlobal, nLocal); +#endif + + sumLocalEnergySoa(oclSim->devSim, oclSim->hostSim); + + sim->ePotential = oclSim->hostSim->ePotential; + sim->eKinetic = oclSim->hostSim->eKinetic ; +} + + +void runRef() +{ + printLine(); + printf("Running reference simulation\n"); + // write initial state + //writeClsman(sim,(char *) "init.bin"); + + // do the computation + //(void)doComputeWork(sim); + + // write final configuration + //writeClsman(sim,(char *) "final.bin"); + + // free memory + //destroySimulation(&sim); +} + + +#ifdef INTEROP_VIZ +void keyboard(unsigned char key, int x, int y) +{ + glutPostRedisplay(); +} + +void idle() +{ + glutPostRedisplay(); +} + +void mouse(int button, int state, int x, int y) +{ + if (state == GLUT_DOWN) mouse_buttons |= 1< +#include +#include +#include +#include +#include + +#include "helpers.h" +#include "mytype.h" +#include "mycommand.h" +#include "CoMDTypes.h" +#include "ljForce.h" +#include "decomposition.h" +#include "constants.h" + +#define DEBUGLEVEL 0 +#define PMDDEBUGPRINTF(xxx,...) {if(xxx>DEBUGLEVEL) printf(__VA_ARGS__);} +#define fPMDDEBUGPRINTF(xxx,...) {if(xxx>DEBUGLEVEL) fprintf(__VA_ARGS__);} + + +HostSimAos hostSimAos; +DevSimAos devSimAos; + +double ts, te; + +OclSimSoa* initOclSimSoa(SimFlat* sim, Command cmd); + +void computeIterationSoa2(SimFlat* sim, OclSimSoa* oclSim); + +void computeIterationSoa(SimFlat* sim, HostSimSoa* hostSim, DevSimSoa* devSim); + +void computeIterationAos(SimFlat* sim); + +void finishOclSoa(SimFlat* sim, HostSimSoa* hostSim, DevSimSoa* devSim); + +void finishOclAos(); + +void computeInitSoa(SimFlat* sim, HostSimSoa* hostSim, DevSimSoa* devSim); + +void computeInitAos(SimFlat* sim); + +#endif diff --git a/comd-cl/src-cl/constants.h b/comd-cl/src-cl/constants.h new file mode 100644 index 0000000..b1ae829 --- /dev/null +++ b/comd-cl/src-cl/constants.h @@ -0,0 +1,41 @@ +/// \file +/// Contains constants for unit conversions. +/// +/// The units for this code are: +/// - Time in femtoseconds (fs) +/// - Length in Angstroms (Angs) +/// - Energy in electron Volts (eV) +/// - Mass read in as Atomic Mass Units (amu) and then converted for +/// consistency (energy*time^2/length^2) +/// Values are taken from NIST, http://physics.nist.gov/cuu/Constants/ + +#ifndef _CONSTANTS_H_ +#define _CONSTANTS_H_ + +/// 1 amu in kilograms +#define amuInKilograms 1.660538921e-27 + +/// 1 fs in seconds +#define fsInSeconds 1.0e-15 + +/// 1 Ang in meters +#define AngsInMeters 1.0e-10 + +/// 1 eV in Joules +#define eVInJoules 1.602176565e-19 + +/// Internal mass units are eV * fs^2 / Ang^2 +static const double amuToInternalMass = + amuInKilograms * AngsInMeters * AngsInMeters + / (fsInSeconds * fsInSeconds * eVInJoules); + +/// Boltmann constant in eV's +static const double kB_eV = 8.6173324e-5; // eV/K + +/// Hartrees to eVs +static const double hartreeToEv = 27.21138505; + +/// Bohrs to Angstroms +static const double bohrToAngs = 0.52917721092; + +#endif diff --git a/comd-cl/src-cl/decomposition.c b/comd-cl/src-cl/decomposition.c new file mode 100644 index 0000000..d9974d6 --- /dev/null +++ b/comd-cl/src-cl/decomposition.c @@ -0,0 +1,66 @@ +/// \file +/// Parallel domain decomposition. This version of CoMD uses a simple +/// spatial Cartesian domain decomposition. The simulation box is +/// divided into equal size bricks by a grid that is xproc by yproc by +/// zproc in size. + +#include "decomposition.h" + +#include + +#include "memUtils.h" +#include "parallel.h" + +/// \param [in] xproc x-size of domain decomposition grid. +/// \param [in] yproc y-size of domain decomposition grid. +/// \param [in] zproc z-size of domain decomposition grid. +/// \param [in] globalExtent Size of the simulation domain (in Angstroms). +Domain* initDecomposition(int xproc, int yproc, int zproc, real3 globalExtent) +{ + assert( xproc * yproc * zproc == getNRanks()); + + Domain* dd = comdMalloc(sizeof(Domain)); + dd->procGrid[0] = xproc; + dd->procGrid[1] = yproc; + dd->procGrid[2] = zproc; + // calculate grid coordinates i,j,k for this processor + int myRank = getMyRank(); + dd->procCoord[0] = myRank % dd->procGrid[0]; + myRank /= dd->procGrid[0]; + dd->procCoord[1] = myRank % dd->procGrid[1]; + dd->procCoord[2] = myRank / dd->procGrid[1]; + + // initialialize global bounds + for (int i = 0; i < 3; i++) + { + dd->globalMin[i] = 0; + dd->globalMax[i] = globalExtent[i]; + dd->globalExtent[i] = dd->globalMax[i] - dd->globalMin[i]; + } + + // initialize local bounds on this processor + for (int i = 0; i < 3; i++) + { + dd->localExtent[i] = dd->globalExtent[i] / dd->procGrid[i]; + dd->localMin[i] = dd->globalMin[i] + dd->procCoord[i] * dd->localExtent[i]; + dd->localMax[i] = dd->globalMin[i] + (dd->procCoord[i]+1) * dd->localExtent[i]; + } + + return dd; +} + +/// \details +/// Calculates the rank of the processor with grid coordinates +/// (ix+dix, iy+diy, iz+diz) where (ix, iy, iz) are the grid coordinates +/// of the local rank. Assumes periodic boundary conditions. The +/// deltas cannot be smaller than -procGrid[ii]. +int processorNum(Domain* domain, int dix, int diy, int diz) +{ + const int* procCoord = domain->procCoord; // alias + const int* procGrid = domain->procGrid; // alias + int ix = (procCoord[0] + dix + procGrid[0]) % procGrid[0]; + int iy = (procCoord[1] + diy + procGrid[1]) % procGrid[1]; + int iz = (procCoord[2] + diz + procGrid[2]) % procGrid[2]; + + return ix + procGrid[0] *(iy + procGrid[1]*iz); +} diff --git a/comd-cl/src-cl/decomposition.h b/comd-cl/src-cl/decomposition.h new file mode 100644 index 0000000..28aaade --- /dev/null +++ b/comd-cl/src-cl/decomposition.h @@ -0,0 +1,33 @@ +/// \file +/// Parallel domain decomposition. + +#ifndef _GEOMETRY_H_ +#define _GEOMETRY_H_ + +#include "mytype.h" + +/// Domain decomposition information. +typedef struct DomainSt +{ + // process-layout data + int procGrid[3]; //!< number of processors in each dimension + int procCoord[3]; //!< i,j,k for this processor + + // global bounds data + real3 globalMin; //!< minimum global coordinate (angstroms) + real3 globalMax; //!< maximum global coordinate (angstroms) + real3 globalExtent; //!< global size: globalMax - globalMin + + // local bounds data + real3 localMin; //!< minimum coordinate on local processor + real3 localMax; //!< maximum coordinate on local processor + real3 localExtent; //!< localMax - localMin +} Domain; + +struct DomainSt* initDecomposition(int xproc, int yproc, int zproc, + real3 globalExtent); + +/// Find the MPI rank of a neighbor domain from a relative coordinate. +int processorNum(Domain* domain, int dix, int diy, int dik); + +#endif diff --git a/comd-cl/src-cl/decompositionCL.c b/comd-cl/src-cl/decompositionCL.c new file mode 100644 index 0000000..969acd0 --- /dev/null +++ b/comd-cl/src-cl/decompositionCL.c @@ -0,0 +1,45 @@ +#include "helpers.h" + +HostDomain* initHostDomainSoa(SimFlat* sim) +{ + HostDomain* domain; + + domain = malloc(sizeof(HostDomain)); + domain->localMin = malloc(3*sizeof(cl_real)); + domain->localMax = malloc(3*sizeof(cl_real)); + for (int j=0;j<3;j++) + { + domain->localMin[j] = sim->domain->localMin[j]; + domain->localMax[j] = sim->domain->localMax[j]; + } + return domain; +} + +HostDomain* initHostDomainAos(SimFlat* sim) +{ + HostDomain* domain; + + domain = malloc(sizeof(HostDomain)); + domain->localMin = malloc(sizeof(cl_real4)); + domain->localMax = malloc(sizeof(cl_real4)); + for (int j=0;j<3;j++) + { + domain->localMin[j] = sim->domain->localMin[j]; + domain->localMax[j] = sim->domain->localMax[j]; + } + return domain; +} + +void createDevDomainSoa(DevDomain* devDomain) +{ + oclCreateReadWriteBuffer(&devDomain->localMin, sizeof(cl_real)*3); + oclCreateReadWriteBuffer(&devDomain->localMax, sizeof(cl_real)*3); +} + +void createDevDomainAos(DevDomain* devDomain) +{ + oclCreateReadWriteBuffer(&devDomain->localMin, sizeof(cl_real4)); + oclCreateReadWriteBuffer(&devDomain->localMax, sizeof(cl_real4)); +} + + diff --git a/comd-cl/src-cl/decompositionCL.h b/comd-cl/src-cl/decompositionCL.h new file mode 100644 index 0000000..f1a2e0e --- /dev/null +++ b/comd-cl/src-cl/decompositionCL.h @@ -0,0 +1,42 @@ +#ifndef DECOMPOSITIONCL_H +#define DECOMPOSITIONCL_H + +typedef struct HostDomainSt +{ + int procGrid[3]; + int procCoord[3]; + + cl_real* globalMin; + cl_real* globalMax; + cl_real* globalExtent; + + cl_real* localMin; + cl_real* localMax; + cl_real* localExtent; + +} HostDomain; + +typedef struct DevDomainSt +{ + cl_mem procGrid; + cl_mem procCoord; + + cl_mem globalMin; + cl_mem globalMax; + cl_mem globalExtent; + + cl_mem localMin; + cl_mem localMax; + cl_mem localExtent; + +} DevDomain; + +HostDomain* initHostDomainSoa(SimFlat* sim); + +HostDomain* initHostDomainAos(SimFlat* sim); + +void createDevDomainSoa(DevDomain* devDomain); + +void createDevDomainAos(DevDomain* devDomain); + +#endif diff --git a/comd-cl/src-cl/deformation.c b/comd-cl/src-cl/deformation.c new file mode 100644 index 0000000..6d713ec --- /dev/null +++ b/comd-cl/src-cl/deformation.c @@ -0,0 +1,176 @@ +#include "deformation.h" + +#include +#include +#include +#include +#include + +#include "CoMDTypes.h" +#include "memUtils.h" + +void printTensor(int step, real_t* mat9) +{ + //fprintf(stressOut, "[ %g %g %g] \n [%g %g %g] \n [%g %g %g] \n", + fprintf(stressOut, "%6d % 12.6g % 12.6g % 12.6g % 12.6g % 12.6g % 12.6g % 12.6g % 12.6g % 12.6g \n", + step, + mat9[0], mat9[1], mat9[2], + mat9[3], mat9[4], mat9[5], + mat9[6], mat9[7], mat9[8]); +} + +// form the matrix-vector product in place +void matVec3 (real_t *mat, real_t *vec) +{ + real_t prod[3]; + + prod[0] = mat[0]*vec[0] + mat[1]*vec[1] + mat[2]*vec[2]; + prod[1] = mat[3]*vec[0] + mat[4]*vec[1] + mat[5]*vec[2]; + prod[2] = mat[6]*vec[0] + mat[7]*vec[1] + mat[8]*vec[2]; + + vec[0] = prod[0]; + vec[1] = prod[1]; + vec[2] = prod[2]; +} + + +void matInv3x3 (real_t *in, real_t *out) +{ + out[0] = in[8]*in[4] - in[7]*in[5]; + out[1] = in[7]*in[2] - in[8]*in[1]; + out[2] = in[5]*in[1] - in[4]*in[2]; + out[3] = in[6]*in[5] - in[8]*in[3]; + out[4] = in[8]*in[0] - in[6]*in[2]; + out[5] = in[3]*in[2] - in[5]*in[0]; + out[6] = in[7]*in[3] - in[6]*in[4]; + out[7] = in[6]*in[1] - in[7]*in[0]; + out[8] = in[4]*in[0] - in[3]*in[1]; + + real_t det = in[0]*(in[8]*in[4] - in[7]*in[5]) + - in[3]*(in[8]*in[1] - in[7]*in[2]) + + in[6]*(in[5]*in[1] - in[4]*in[2]); + + // add the determinant to the tensor + in[9] = det; + + real_t invDet = 1.0/det; + + printf("Determinant, inverse; %g, %g\n", det, invDet); + + for (int m = 0; m<9; m++) + { + out[m] = out[m]*invDet; + } + // add the determinant to the inverse + out[9] = invDet; + + real_t test[9]; + + for (int i = 0;i<3;i++) + { + for (int j = 0;j<3;j++) + { + int m = 3*i + j; + test[m] = 0.0; + for (int k = 0; k<3; k++) + { + test[m] +=in[3*i + k]*out[3*k + j]; + } + } + + } + printf("Input matrix:\n"); + printTensor(0, in); + + printf("Output matrix:\n"); + printTensor(0, out); + + printf("Test matrix:\n"); + printTensor(0, test); +} + +// initialize the strain, inverse strain tensors +Deformation* initDeformation(SimFlat* sim, real_t defGrad) +{ + Deformation* defInfo = comdMalloc(sizeof(Deformation)); + + defInfo->defGrad = defGrad; + + real_t testMat[10]; + real_t testInv[10]; + for (int m = 0; m<10;m++) + { + testMat[m] = 0.0; + } + // diagonal terms + // 1,1 term is deformation gradient + testMat[0] = defGrad; + testMat[4] = 1.0; + testMat[8] = 1.0; + // + testMat[1] = 0.0; + testMat[3] = 0.0; + + matInv3x3(testMat, testInv); + + // transfer to sim structs, including determinant values + printf("Writing to strain tensors\n"); + for (int m = 0; m<10; m ++) + { + defInfo->strain[m] = testMat[m]; + defInfo->invStrain[m] = testInv[m]; + defInfo->stress[m] = 0.0; + } + defInfo->globalVolume = + sim->domain->globalExtent[0]* + sim->domain->globalExtent[1]* + sim->domain->globalExtent[2]; + printf("done\n"); + return defInfo; +} + +void forwardDeformation(SimFlat *s) +{ + for (int iBox=0; iBox < s->boxes->nTotalBoxes; iBox++) + { + // apply deformation to all particles + for (int iOff=MAXATOMS*iBox,ii=0; iiboxes->nAtoms[iBox]; ii++,iOff++) + { + /* loop over atoms in iBox */ + real_t atomPos[3]; + for (int m=0; m<3; m++) + { + atomPos[m] = s->atoms->r[iOff][m]; + } + matVec3(s->defInfo->strain, atomPos); + for (int m=0; m<3; m++) + { + s->atoms->r[iOff][m] = atomPos[m]; + } + } + } + +} + +void reverseDeformation(SimFlat *s) +{ + for (int iBox=0; iBox < s->boxes->nTotalBoxes; iBox++) + { + // apply deformation to all particles + for (int iOff=MAXATOMS*iBox,ii=0; iiboxes->nAtoms[iBox]; ii++,iOff++) + { + /* loop over atoms in iBox */ + real_t atomPos[3]; + for (int m=0; m<3; m++) + { + atomPos[m] = s->atoms->r[iOff][m]; + } + matVec3(s->defInfo->invStrain, atomPos); + for (int m=0; m<3; m++) + { + s->atoms->r[iOff][m] = atomPos[m]; + } + } + } + +} diff --git a/comd-cl/src-cl/deformation.h b/comd-cl/src-cl/deformation.h new file mode 100644 index 0000000..7da4640 --- /dev/null +++ b/comd-cl/src-cl/deformation.h @@ -0,0 +1,16 @@ +#ifndef __DEFORMATION_H_ +#define __DEFORMATION_H_ + +#include "CoMDTypes.h" + +FILE* stressOut; + +void printTensor(int step, real_t* mat9); +void matVec3(real_t *mat, real_t *vec); +void matInv3x3 (real_t *in, real_t *out); +void forwardDeformation(SimFlat *s); +void reverseDeformation(SimFlat *s); + +Deformation* initDeformation(SimFlat *sim, real_t defGrad); + +#endif diff --git a/comd-cl/src-cl/eam.c b/comd-cl/src-cl/eam.c new file mode 100644 index 0000000..dd0080a --- /dev/null +++ b/comd-cl/src-cl/eam.c @@ -0,0 +1,842 @@ +/// \file +/// Compute forces for the Embedded Atom Model (EAM). +/// +/// The Embedded Atom Model (EAM) is a widely used model of atomic +/// interactions in simple metals. +/// +/// http://en.wikipedia.org/wiki/Embedded_atom_model +/// +/// In the EAM, the total potential energy is written as a sum of a pair +/// potential and the embedding energy, F: +/// +/// \f[ +/// U = \sum_{ij} \varphi(r_{ij}) + \sum_i F({\bar\rho_i}) +/// \f] +/// +/// The pair potential \f$\varphi_{ij}\f$ is a two-body inter-atomic +/// potential, similar to the Lennard-Jones potential, and +/// \f$F(\bar\rho)\f$ is interpreted as the energy required to embed an +/// atom in an electron field with density \f$\bar\rho\f$. The local +/// electon density at site i is calulated by summing the "effective +/// electron density" due to all neighbors of atom i: +/// +/// \f[ +/// \bar\rho_i = \sum_j \rho_j(r_{ij}) +/// \f] +/// +/// The force on atom i, \f${\bf F}_i\f$ is given by +/// +/// \f{eqnarray*}{ +/// {\bf F}_i & = & -\nabla_i \sum_{jk} U(r_{jk})\\ +/// & = & - \sum_j\left\{ +/// \varphi'(r_{ij}) + +/// [F'(\bar\rho_i) + F'(\bar\rho_j)]\rho'(r_{ij}) +/// \right\} \hat{r}_{ij} +/// \f} +/// +/// where primes indicate the derivative of a function with respect to +/// its argument and \f$\hat{r}_{ij}\f$ is a unit vector in the +/// direction from atom i to atom j. +/// +/// The form of this force expression has two significant consequences. +/// First, unlike with a simple pair potential, it is not possible to +/// compute the potential energy and the forces on the atoms in a single +/// loop over the pairs. The terms involving \f$ F'(\bar\rho) \f$ +/// cannot be calculated until \f$ \bar\rho \f$ is known, but +/// calculating \f$ \bar\rho \f$ requires a loop over the pairs. Hence +/// the EAM force routine contains three loops. +/// +/// -# Loop over all pairs, compute the two-body +/// interaction and the electron density at each atom +/// -# Loop over all atoms, compute the embedding energy and its +/// derivative for each atom +/// -# Loop over all pairs, compute the embedding +/// energy contribution to the force and add to the two-body force +/// +/// The second loop over pairs doubles the data motion requirement +/// relative to a simple pair potential. +/// +/// The second consequence of the force expression is that computing the +/// forces on all atoms requires additional communication beyond the +/// coordinates of all remote atoms within the cutoff distance. This is +/// again because of the terms involving \f$ F'(\bar\rho_j) \f$. If +/// atom j is a remote atom, the local task cannot compute \f$ +/// \bar\rho_j \f$. (Such a calculation would require all the neighbors +/// of atom j, some of which can be up to 2 times the cutoff distance +/// away from a local atom---outside the typical halo exchange range.) +/// +/// To obtain the needed remote density we introduce a second halo +/// exchange after loop number 2 to communicate \f$ F'(\bar\rho) \f$ for +/// remote atoms. This provides the data we need to complete the third +/// loop, but at the cost of introducing a communication operation in +/// the middle of the force routine. +/// +/// At least two alternate methods can be used to deal with the remote +/// density problem. One possibility is to extend the halo exchange +/// radius for the atom exchange to twice the potential cutoff distance. +/// This is likely undesirable due to large increase in communication +/// volume. The other possibility is to accumulate partial force terms +/// on the tasks where they can be computed. In this method, tasks will +/// compute force contributions for remote atoms, then communicate the +/// partial forces at the end of the halo exchange. This method has the +/// advantage that the communication is deffered until after the force +/// loops, but the disadvantage that three times as much data needs to +/// be set (three components of the force vector instead of a single +/// scalar \f$ F'(\bar\rho) \f$. + + +#include "eam.h" + +#include +#include +#include +#include + +#include "constants.h" +#include "memUtils.h" +#include "parallel.h" +#include "linkCells.h" +#include "CoMDTypes.h" +#include "performanceTimers.h" +#include "haloExchange.h" + +#define MAX(A,B) ((A) > (B) ? (A) : (B)) + + +// EAM functionality +static int eamForce(SimFlat* s); +static void eamPrint(FILE* file, BasePotential* pot); +static void eamDestroy(BasePotential** pot); +static void eamBcastPotential(EamPotential* pot); + + +// Table interpolation functionality +static InterpolationObject* initInterpolationObject( + int n, real_t x0, real_t dx, real_t* data); +static void destroyInterpolationObject(InterpolationObject** table); +static void interpolate(InterpolationObject* table, real_t r, real_t* f, real_t* df); +static void bcastInterpolationObject(InterpolationObject** table); +static void printTableData(InterpolationObject* table, const char* fileName); + + +// Read potential tables from files. +static void eamReadSetfl(EamPotential* pot, const char* dir, const char* potName); +static void eamReadFuncfl(EamPotential* pot, const char* dir, const char* potName); +static void fileNotFound(const char* callSite, const char* filename); +static void notAlloyReady(const char* callSite); +static void typeNotSupported(const char* callSite, const char* type); + + +/// Allocate and initialize the EAM potential data structure. +/// +/// \param [in] dir The directory in which potential table files are found. +/// \param [in] file The name of the potential table file. +/// \param [in] type The file format of the potential file (setfl or funcfl). +BasePotential* initEamPot(const char* dir, const char* file, const char* type) +{ + EamPotential* pot = comdMalloc(sizeof(EamPotential)); + assert(pot); + pot->force = eamForce; + pot->print = eamPrint; + pot->destroy = eamDestroy; + pot->phi = NULL; + pot->rho = NULL; + pot->f = NULL; + + // Initialization of the next three items requires information about + // the parallel decomposition and link cells that isn't available + // with the potential is initialized. Hence, we defer their + // initialization until the first time we call the force routine. + pot->dfEmbed = NULL; + pot->rhobar = NULL; + pot->forceExchange = NULL; + + if (getMyRank() == 0) + { + if (strcmp(type, "setfl" ) == 0) + eamReadSetfl(pot, dir, file); + else if (strcmp(type,"funcfl") == 0) + eamReadFuncfl(pot, dir, file); + else + typeNotSupported("initEamPot", type); + } + eamBcastPotential(pot); + + return (BasePotential*) pot; +} + +/// Calculate potential energy and forces for the EAM potential. +/// +/// Three steps are required: +/// +/// -# Loop over all atoms and their neighbors, compute the two-body +/// interaction and the electron density at each atom +/// -# Loop over all atoms, compute the embedding energy and its +/// derivative for each atom +/// -# Loop over all atoms and their neighbors, compute the embedding +/// energy contribution to the force and add to the two-body force +/// +int eamForce(SimFlat* s) +{ + EamPotential* pot = (EamPotential*) s->pot; + assert(pot); + + // set up halo exchange and internal storage on first call to forces. + if (pot->forceExchange == NULL) + { + int maxTotalAtoms = MAXATOMS*s->boxes->nTotalBoxes; + pot->dfEmbed = comdMalloc(maxTotalAtoms*sizeof(real_t)); + pot->rhobar = comdMalloc(maxTotalAtoms*sizeof(real_t)); + pot->forceExchange = initForceHaloExchange(s->domain, s->boxes); + pot->forceExchangeData = comdMalloc(sizeof(ForceExchangeData)); + pot->forceExchangeData->dfEmbed = pot->dfEmbed; + pot->forceExchangeData->boxes = s->boxes; + } + + real_t rCut2 = pot->cutoff*pot->cutoff; + + // zero forces / energy / rho /rhoprime + real_t etot = 0.0; + memset(s->atoms->f, 0, s->boxes->nTotalBoxes*MAXATOMS*sizeof(real3)); + memset(s->atoms->U, 0, s->boxes->nTotalBoxes*MAXATOMS*sizeof(real_t)); + memset(pot->dfEmbed, 0, s->boxes->nTotalBoxes*MAXATOMS*sizeof(real_t)); + memset(pot->rhobar, 0, s->boxes->nTotalBoxes*MAXATOMS*sizeof(real_t)); + + // virial stress computation added here + for (int m = 0;m<9;m++) + { + s->defInfo->stress[m] = 0.0; + } + + int nbrBoxes[27]; + // loop over local boxes + for (int iBox=0; iBoxboxes->nLocalBoxes; iBox++) + { + int nIBox = s->boxes->nAtoms[iBox]; + int nNbrBoxes = getNeighborBoxes(s->boxes, iBox, nbrBoxes); + // loop over neighbor boxes of iBox (some may be halo boxes) + for (int jTmp=0; jTmpboxes->nAtoms[jBox]; + // loop over atoms in iBox + for (int iOff=MAXATOMS*iBox,ii=0; iiatoms->r[iOff][k]-s->atoms->r[jOff][k]; + r2+=dr[k]*dr[k]; + } + if(r2>rCut2) continue; + + double r = sqrt(r2); + + real_t phiTmp, dPhi, rhoTmp, dRho; + interpolate(pot->phi, r, &phiTmp, &dPhi); + interpolate(pot->rho, r, &rhoTmp, &dRho); + + for (int k=0; k<3; k++) + { + s->atoms->f[iOff][k] -= dPhi*dr[k]/r; + s->atoms->f[jOff][k] += dPhi*dr[k]/r; + } + + for (int i=0; i<3; i++) + { + for (int j=0; j<3; j++) + { + int m = 3*i + j; + s->defInfo->stress[m] += 1.0*dPhi*dr[i]*dr[j]/r; + } + } + + // update energy terms + // calculate energy contribution based on whether + // the neighbor box is local or remote + if (jBox < s->boxes->nLocalBoxes) + etot += phiTmp; + else + etot += 0.5*phiTmp; + + s->atoms->U[iOff] += 0.5*phiTmp; + s->atoms->U[jOff] += 0.5*phiTmp; + + // accumulate rhobar for each atom + pot->rhobar[iOff] += rhoTmp; + pot->rhobar[jOff] += rhoTmp; + + } // loop over atoms in jBox + } // loop over atoms in iBox + } // loop over neighbor boxes + } // loop over local boxes + + // Compute Embedding Energy + // loop over all local boxes + for (int iBox=0; iBoxboxes->nLocalBoxes; iBox++) + { + int iOff; + int nIBox = s->boxes->nAtoms[iBox]; + + // loop over atoms in iBox + for (int iOff=MAXATOMS*iBox,ii=0; iif, pot->rhobar[iOff], &fEmbed, &dfEmbed); + pot->dfEmbed[iOff] = dfEmbed; // save derivative for halo exchange + etot += fEmbed; + s->atoms->U[iOff] += fEmbed; + int iSpecies = s->atoms->iSpecies[iOff]; + real_t invMass = 1.0/s->species[iSpecies].mass; + for (int i=0; i<3; i++) + { + for (int j=0; j<3; j++) + { + int m = 3*i + j; + s->defInfo->stress[m] -= s->atoms->p[iOff][i]*s->atoms->p[iOff][j]*invMass; + } + } + } + } + + // exchange derivative of the embedding energy with repsect to rhobar + startTimer(eamHaloTimer); + haloExchange(pot->forceExchange, pot->forceExchangeData); + stopTimer(eamHaloTimer); + + // third pass + // loop over local boxes + for (int iBox=0; iBoxboxes->nLocalBoxes; iBox++) + { + int nIBox = s->boxes->nAtoms[iBox]; + int nNbrBoxes = getNeighborBoxes(s->boxes, iBox, nbrBoxes); + // loop over neighbor boxes of iBox (some may be halo boxes) + for (int jTmp=0; jTmpboxes->nAtoms[jBox]; + // loop over atoms in iBox + for (int iOff=MAXATOMS*iBox,ii=0; iiatoms->r[iOff][k]-s->atoms->r[jOff][k]; + r2+=dr[k]*dr[k]; + } + if(r2>=rCut2) continue; + + real_t r = sqrt(r2); + + real_t rhoTmp, dRho; + interpolate(pot->rho, r, &rhoTmp, &dRho); + + for (int k=0; k<3; k++) + { + s->atoms->f[iOff][k] -= (pot->dfEmbed[iOff]+pot->dfEmbed[jOff])*dRho*dr[k]/r; + s->atoms->f[jOff][k] += (pot->dfEmbed[iOff]+pot->dfEmbed[jOff])*dRho*dr[k]/r; + } + + for (int i=0; i<3; i++) + { + for (int j=0; j<3; j++) + { + int m = 3*i + j; + s->defInfo->stress[m] += 1.0*(pot->dfEmbed[iOff]+pot->dfEmbed[jOff])*dRho*dr[i]*dr[j]/r; + } + } + + } // loop over atoms in jBox + } // loop over atoms in iBox + } // loop over neighbor boxes + } // loop over local boxes + + s->ePotential = (real_t) etot; + + for (int m = 0;m<9;m++) + { + s->defInfo->stress[m] = s->defInfo->stress[m]/s->defInfo->globalVolume; + } + + return 0; +} + +void eamPrint(FILE* file, BasePotential* pot) +{ + EamPotential *eamPot = (EamPotential*) pot; + fprintf(file, " Potential type : EAM\n"); + fprintf(file, " Species name : %s\n", eamPot->name); + fprintf(file, " Atomic number : %d\n", eamPot->atomicNo); + fprintf(file, " Mass : "FMT1" amu\n", eamPot->mass/amuToInternalMass); // print in amu + fprintf(file, " Lattice type : %s\n", eamPot->latticeType); + fprintf(file, " Lattice spacing : "FMT1" Angstroms\n", eamPot->lat); + fprintf(file, " Cutoff : "FMT1" Angstroms\n", eamPot->cutoff); +} + +void eamDestroy(BasePotential** pPot) +{ + if ( ! pPot ) return; + EamPotential* pot = *(EamPotential**)pPot; + if ( ! pot ) return; + destroyInterpolationObject(&(pot->phi)); + destroyInterpolationObject(&(pot->rho)); + destroyInterpolationObject(&(pot->f)); + destroyHaloExchange(&(pot->forceExchange)); + comdFree(pot); + *pPot = NULL; + + return; +} + +/// Broadcasts an EamPotential from rank 0 to all other ranks. +/// If the table coefficients are read from a file only rank 0 does the +/// read. Hence we need to broadcast the potential to all other ranks. +void eamBcastPotential(EamPotential* pot) +{ + assert(pot); + + struct + { + real_t cutoff, mass, lat; + char latticeType[8]; + char name[3]; + int atomicNo; + } buf; + if (getMyRank() == 0) + { + buf.cutoff = pot->cutoff; + buf.mass = pot->mass; + buf.lat = pot->lat; + buf.atomicNo = pot->atomicNo; + strcpy(buf.latticeType, pot->latticeType); + strcpy(buf.name, pot->name); + } + bcastParallel(&buf, sizeof(buf), 0); + pot->cutoff = buf.cutoff; + pot->mass = buf.mass; + pot->lat = buf.lat; + pot->atomicNo = buf.atomicNo; + strcpy(pot->latticeType, buf.latticeType); + strcpy(pot->name, buf.name); + + bcastInterpolationObject(&pot->phi); + bcastInterpolationObject(&pot->rho); + bcastInterpolationObject(&pot->f); +} + +/// Builds a structure to store interpolation data for a tabular +/// function. Interpolation must be supported on the range +/// \f$[x_0, x_n]\f$, where \f$x_n = n*dx\f$. +/// +/// \see interpolate +/// \see bcastInterpolationObject +/// \see destroyInterpolationObject +/// +/// \param [in] n number of values in the table. +/// \param [in] x0 minimum ordinate value of the table. +/// \param [in] dx spacing of the ordinate values. +/// \param [in] data abscissa values. An array of size n. +InterpolationObject* initInterpolationObject( + int n, real_t x0, real_t dx, real_t* data) +{ + InterpolationObject* table = + (InterpolationObject *)comdMalloc(sizeof(InterpolationObject)) ; + assert(table); + + table->values = (real_t*)comdCalloc(1, (n+3)*sizeof(real_t)); + assert(table->values); + + table->values++; + table->n = n; + table->invDx = 1.0/dx; + table->x0 = x0; + + for (int ii=0; iivalues[ii] = data[ii]; + + table->values[-1] = table->values[0]; + table->values[n+1] = table->values[n] = table->values[n-1]; + + return table; +} + +void destroyInterpolationObject(InterpolationObject** a) +{ + if ( ! a ) return; + if ( ! *a ) return; + if ( (*a)->values) + { + (*a)->values--; + comdFree((*a)->values); + } + comdFree(*a); + *a = NULL; + + return; +} + +/// Interpolate a table to determine f(r) and its derivative f'(r). +/// +/// The forces on the particle are much more sensitive to the derivative +/// of the potential than on the potential itself. It is therefore +/// absolutely essential that the interpolated derivatives are smooth +/// and continuous. This function uses simple quadratic interpolation +/// to find f(r). Since quadric interpolants don't have smooth +/// derivatives, f'(r) is computed using a 4 point finite difference +/// stencil. +/// +/// Interpolation is used heavily by the EAM force routine so this +/// function is a potential performance hot spot. Feel free to +/// reimplement this function (and initInterpolationObject if necessay) +/// with any higher performing implementation of interpolation, as long +/// as the alternate implmentation that has the required smoothness +/// properties. Cubic splines are one common alternate choice. +/// +/// \param [in] table Interpolation table. +/// \param [in] r Point where function value is needed. +/// \param [out] f The interpolated value of f(r). +/// \param [out] df The interpolated value of df(r)/dr. +void interpolate(InterpolationObject* table, real_t r, real_t* f, real_t* df) +{ + const real_t* tt = table->values; // alias + + if ( r < table->x0 ) r = table->x0; + + r = (r-table->x0)*(table->invDx) ; + int ii = (int)floor(r); + if (ii > table->n) + { + ii = table->n; + r = table->n / table->invDx; + } + // reset r to fractional distance + r = r - floor(r); + + real_t g1 = tt[ii+1] - tt[ii-1]; + real_t g2 = tt[ii+2] - tt[ii]; + + *f = tt[ii] + 0.5*r*(g1 + r*(tt[ii+1] + tt[ii-1] - 2.0*tt[ii]) ); + + *df = 0.5*(g1 + r*(g2-g1))*table->invDx; +} + +/// Broadcasts an InterpolationObject from rank 0 to all other ranks. +/// +/// It is commonly the case that the data needed to create the +/// interpolation table is available on only one task (for example, only +/// one task has read the data from a file). Broadcasting the table +/// eliminates the need to put broadcast code in multiple table readers. +/// +/// \see eamBcastPotential +void bcastInterpolationObject(InterpolationObject** table) +{ + struct + { + int n; + real_t x0, invDx; + } buf; + + if (getMyRank() == 0) + { + buf.n = (*table)->n; + buf.x0 = (*table)->x0; + buf.invDx = (*table)->invDx; + } + bcastParallel(&buf, sizeof(buf), 0); + + if (getMyRank() != 0) + { + assert(*table == NULL); + *table = comdMalloc(sizeof(InterpolationObject)); + (*table)->n = buf.n; + (*table)->x0 = buf.x0; + (*table)->invDx = buf.invDx; + (*table)->values = comdMalloc(sizeof(real_t) * (buf.n+3) ); + (*table)->values++; + } + + int valuesSize = sizeof(real_t) * ((*table)->n+3); + bcastParallel((*table)->values-1, valuesSize, 0); +} + +void printTableData(InterpolationObject* table, const char* fileName) +{ + if (!printRank()) return; + + FILE* potData; + potData = fopen(fileName,"w"); + real_t dR = 1.0/table->invDx; + for (int i = 0; in; i++) + { + real_t r = table->x0+i*dR; + fprintf(potData, "%d %e %e\n", i, r, table->values[i]); + } + fclose(potData); +} + +/// Reads potential data from a setfl file and populates +/// corresponding members and InterpolationObjects in an EamPotential. +/// +/// setfl is a file format for tabulated potential functions used by +/// the original EAM code DYNAMO. A setfl file contains EAM +/// potentials for multiple elements. +/// +/// The contents of a setfl file are: +/// +/// | Line Num | Description +/// | :------: | :---------- +/// | 1 - 3 | comments +/// | 4 | ntypes type1 type2 ... typen +/// | 5 | nrho drho nr dr rcutoff +/// | F, rho | Following line 5 there is a block for each atom type with F, and rho. +/// | b1 | ielem(i) amass(i) latConst(i) latType(i) +/// | b2 | embedding function values F(rhobar) starting at rhobar=0 +/// | ... | (nrho values. Multiple values per line allowed.) +/// | bn | electron density, starting at r=0 +/// | ... | (nr values. Multiple values per line allowed.) +/// | repeat | Return to b1 for each atom type. +/// | phi | phi_ij for (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), ..., +/// | p1 | pair potential between type i and type j, starting at r=0 +/// | ... | (nr values. Multiple values per line allowed.) +/// | repeat | Return to p1 for each phi_ij +/// +/// Where: +/// - ntypes : number of element types in the potential +/// - nrho : number of points the embedding energy F(rhobar) +/// - drho : table spacing for rhobar +/// - nr : number of points for rho(r) and phi(r) +/// - dr : table spacing for r in Angstroms +/// - rcutoff : cut-off distance in Angstroms +/// - ielem(i) : atomic number for element(i) +/// - amass(i) : atomic mass for element(i) in AMU +/// - latConst(i) : lattice constant for element(i) in Angstroms +/// - latType(i) : lattice type for element(i) +/// +/// setfl format stores r*phi(r), so we need to converted to the pair +/// potential phi(r). In the file, phi(r)*r is in eV*Angstroms. +/// NB: phi is not defined for r = 0 +/// +/// F(rhobar) is in eV. +/// +void eamReadSetfl(EamPotential* pot, const char* dir, const char* potName) +{ + char tmp[4096]; + sprintf(tmp, "%s/%s", dir, potName); + + FILE* potFile = fopen(tmp, "r"); + if (potFile == NULL) + fileNotFound("eamReadSetfl", tmp); + + // read the first 3 lines (comments) + fgets(tmp, sizeof(tmp), potFile); + fgets(tmp, sizeof(tmp), potFile); + fgets(tmp, sizeof(tmp), potFile); + + // line 4 + fgets(tmp, sizeof(tmp), potFile); + int nElems; + sscanf(tmp, "%d", &nElems); + if( nElems != 1 ) + notAlloyReady("eamReadSetfl"); + + //line 5 + int nRho, nR; + double dRho, dR, cutoff; + // The same cutoff is used by all alloys, NB: cutoff = nR * dR is redundant + fgets(tmp, sizeof(tmp), potFile); + sscanf(tmp, "%d %le %d %le %le", &nRho, &dRho, &nR, &dR, &cutoff); + pot->cutoff = cutoff; + + // **** THIS CODE IS RESTRICTED TO ONE ELEMENT + // Per-atom header + fgets(tmp, sizeof(tmp), potFile); + int nAtomic; + double mass, lat; + char latticeType[8]; + sscanf(tmp, "%d %le %le %s", &nAtomic, &mass, &lat, latticeType); + pot->atomicNo = nAtomic; + pot->lat = lat; + pot->mass = mass * amuToInternalMass; // file has mass in AMU. + strcpy(pot->latticeType, latticeType); + + // allocate read buffer + int bufSize = MAX(nRho, nR); + real_t* buf = comdMalloc(bufSize * sizeof(real_t)); + real_t x0 = 0.0; + + // Read embedding energy F(rhobar) + for (int ii=0; iif = initInterpolationObject(nRho, x0, dRho, buf); + + // Read electron density rho(r) + for (int ii=0; iirho = initInterpolationObject(nR, x0, dR, buf); + + // Read phi(r)*r and convert to phi(r) + for (int ii=0; iiphi = initInterpolationObject(nR, x0, dR, buf); + + comdFree(buf); + + // write to text file for comparison, currently commented out +/* printPot(pot->f, "SetflDataF.txt"); */ +/* printPot(pot->rho, "SetflDataRho.txt"); */ +/* printPot(pot->phi, "SetflDataPhi.txt"); */ +} + +/// Reads potential data from a funcfl file and populates +/// corresponding members and InterpolationObjects in an EamPotential. +/// +/// funcfl is a file format for tabulated potential functions used by +/// the original EAM code DYNAMO. A funcfl file contains an EAM +/// potential for a single element. +/// +/// The contents of a funcfl file are: +/// +/// | Line Num | Description +/// | :------: | :---------- +/// | 1 | comments +/// | 2 | elem amass latConstant latType +/// | 3 | nrho drho nr dr rcutoff +/// | 4 | embedding function values F(rhobar) starting at rhobar=0 +/// | ... | (nrho values. Multiple values per line allowed.) +/// | x' | electrostatic interation Z(r) starting at r=0 +/// | ... | (nr values. Multiple values per line allowed.) +/// | y' | electron density values rho(r) starting at r=0 +/// | ... | (nr values. Multiple values per line allowed.) +/// +/// Where: +/// - elem : atomic number for this element +/// - amass : atomic mass for this element in AMU +/// - latConstant : lattice constant for this elemnent in Angstroms +/// - lattticeType : lattice type for this element (e.g. FCC) +/// - nrho : number of values for the embedding function, F(rhobar) +/// - drho : table spacing for rhobar +/// - nr : number of values for Z(r) and rho(r) +/// - dr : table spacing for r in Angstroms +/// - rcutoff : potential cut-off distance in Angstroms +/// +/// funcfl format stores the "electrostatic interation" Z(r). This needs to +/// be converted to the pair potential phi(r). +/// using the formula +/// \f[phi = Z(r) * Z(r) / r\f] +/// NB: phi is not defined for r = 0 +/// +/// Z(r) is in atomic units (i.e., sqrt[Hartree * bohr]) so it is +/// necesary to convert to eV. +/// +/// F(rhobar) is in eV. +/// +void eamReadFuncfl(EamPotential* pot, const char* dir, const char* potName) +{ + char tmp[4096]; + + sprintf(tmp, "%s/%s", dir, potName); + FILE* potFile = fopen(tmp, "r"); + if (potFile == NULL) + fileNotFound("eamReadFuncfl", tmp); + + // line 1 + fgets(tmp, sizeof(tmp), potFile); + char name[3]; + sscanf(tmp, "%s", name); + strcpy(pot->name, name); + + // line 2 + int nAtomic; + double mass, lat; + char latticeType[8]; + fgets(tmp,sizeof(tmp),potFile); + sscanf(tmp, "%d %le %le %s", &nAtomic, &mass, &lat, latticeType); + pot->atomicNo = nAtomic; + pot->lat = lat; + pot->mass = mass*amuToInternalMass; // file has mass in AMU. + strcpy(pot->latticeType, latticeType); + + // line 3 + int nRho, nR; + double dRho, dR, cutoff; + fgets(tmp,sizeof(tmp),potFile); + sscanf(tmp, "%d %le %d %le %le", &nRho, &dRho, &nR, &dR, &cutoff); + pot->cutoff = cutoff; + real_t x0 = 0.0; // tables start at zero. + + // allocate read buffer + int bufSize = MAX(nRho, nR); + real_t* buf = comdMalloc(bufSize * sizeof(real_t)); + + // read embedding energy + for (int ii=0; iif = initInterpolationObject(nRho, x0, dRho, buf); + + // read Z(r) and convert to phi(r) + for (int ii=0; iiphi = initInterpolationObject(nR, x0, dR, buf); + + // read electron density rho + for (int ii=0; iirho = initInterpolationObject(nR, x0, dR, buf); + + comdFree(buf); + +/* printPot(pot->f, "funcflDataF.txt"); */ +/* printPot(pot->rho, "funcflDataRho.txt"); */ +/* printPot(pot->phi, "funcflDataPhi.txt"); */ +} + +void fileNotFound(const char* callSite, const char* filename) +{ + fprintf(screenOut, + "%s: Can't open file %s. Fatal Error.\n", callSite, filename); + exit(-1); +} + +void notAlloyReady(const char* callSite) +{ + fprintf(screenOut, + "%s: CoMD 1.1 does not support alloys and cannot\n" + " read setfl files with multiple species. Fatal Error.\n", callSite); + exit(-1); +} + +void typeNotSupported(const char* callSite, const char* type) +{ + fprintf(screenOut, + "%s: Potential type %s not supported. Fatal Error.\n", callSite, type); + exit(-1); +} diff --git a/comd-cl/src-cl/eam.h b/comd-cl/src-cl/eam.h new file mode 100644 index 0000000..17b8cbe --- /dev/null +++ b/comd-cl/src-cl/eam.h @@ -0,0 +1,62 @@ +/// \file +/// Compute forces for the Embedded Atom Model (EAM). + +#ifndef __EAM_H +#define __EAM_H + +#include "mytype.h" +#include "CoMDTypes.h" + +struct BasePotentialSt; +struct LinkCellSt; + +struct BasePotentialSt* initEamPot(const char* dir, const char* file, const char* type); + +/// Pointers to the data that is needed in the load and unload functions +/// for the force halo exchange. +/// \see loadForceBuffer +/// \see unloadForceBuffer +typedef struct ForceExchangeDataSt +{ + real_t* dfEmbed; //pot; + hostEamPot->cutoff = new_pot->cutoff; + printf("Cutoff = %e\n", hostEamPot->cutoff); + + n_v_rho = new_pot->rho->n; + hostEamPot->rhoPotSize = (6 + new_pot->rho->n)*sizeof(cl_real); + printf("rho potential size = %d\n", hostEamPot->rhoPotSize); + + n_v_phi = new_pot->phi->n; + hostEamPot->phiPotSize = (6 + new_pot->phi->n)*sizeof(cl_real); + printf("phi potential size = %d\n", hostEamPot->phiPotSize); + + n_v_F = new_pot->f->n; + hostEamPot->fPotSize = (6 + new_pot->f->n)*sizeof(cl_real); + printf("F potential size = %d\n", hostEamPot->fPotSize); + + hostEamPot->rho = malloc(hostEamPot->rhoPotSize); + hostEamPot->phi = malloc(hostEamPot->phiPotSize); + hostEamPot->F = malloc(hostEamPot->fPotSize); + hostEamPot->nValues = malloc(3*sizeof(cl_int)); + + // Note the EAM array has 3 extra values to account for over/under flow + // We also add another 3 values to store x0, xn, invDx + hostEamPot->rho[n_v_rho+3] = new_pot->rho->x0; + hostEamPot->rho[n_v_rho+4] = new_pot->rho->x0+n_v_rho/new_pot->rho->invDx; + hostEamPot->rho[n_v_rho+5] = new_pot->rho->invDx; + + for (i=0;irho[i] = new_pot->rho->values[i-1]; + } + + hostEamPot->phi[n_v_phi+3] = new_pot->phi->x0; + hostEamPot->phi[n_v_phi+4] = new_pot->phi->x0+n_v_phi/new_pot->phi->invDx; + hostEamPot->phi[n_v_phi+5] = new_pot->phi->invDx; + + for (i=0;iphi[i] = new_pot->phi->values[i-1]; + } + + hostEamPot->F[n_v_F+3] = new_pot->f->x0; + hostEamPot->F[n_v_F+4] = new_pot->f->x0+n_v_F/new_pot->f->invDx; + hostEamPot->F[n_v_F+5] = new_pot->f->invDx; + + for (i=0;iF[i] = new_pot->f->values[i-1]; + } + + hostEamPot->nValues[0] = n_v_phi; + hostEamPot->nValues[1] = n_v_rho; + hostEamPot->nValues[2] = n_v_F; + + // extra atom arrays needed for EAM computation + hostEamPot->totalRealSize = MAXATOMS*sim->boxes->nTotalBoxes*sizeof(cl_real); + hostEamPot->rhobar = malloc(hostEamPot->totalRealSize); + hostEamPot->dfEmbed = malloc(hostEamPot->totalRealSize); +} + +void initDevEam(HostEamPot* hostEamPot, DevEamPot* devEamPot) +{ + oclCreateReadWriteBuffer(&devEamPot->rho, hostEamPot->rhoPotSize); + oclCreateReadWriteBuffer(&devEamPot->phi, hostEamPot->phiPotSize); + oclCreateReadWriteBuffer(&devEamPot->F, hostEamPot->fPotSize); + + oclCreateReadWriteBuffer(&devEamPot->nValues, sizeof(cl_int)*3); + + oclCreateReadWriteBuffer(&devEamPot->dfEmbed, hostEamPot->totalRealSize); + oclCreateReadWriteBuffer(&devEamPot->rhobar, hostEamPot->totalRealSize); + + // add this here to make passing arguments to kernels easier + devEamPot->cutoff = hostEamPot->cutoff; + +} + +void putEamPot(HostEamPot hostEamPot, DevEamPot devEamPot) +{ + oclCopyToDevice(hostEamPot.rho, devEamPot.rho, hostEamPot.rhoPotSize, 0); + oclCopyToDevice(hostEamPot.phi, devEamPot.phi, hostEamPot.phiPotSize, 0); + oclCopyToDevice(hostEamPot.F, devEamPot.F, hostEamPot.fPotSize, 0); + + oclCopyToDevice(hostEamPot.nValues, devEamPot.nValues, sizeof(cl_int)*3, 0); +} + +void setEamArgsSoa(cl_kernel *forceKernels, DevSimSoa* devSim) +{ + /** Set the kernel arguments for the three EAM force computation kernels + **/ + +#if (USE_CHEBY) + DevEamCh localPot; + localPot = devSim->eamCh; +#else + DevEamPot localPot; + localPot = devSim->eamPot; +#endif + + printf("Setting EAM kernel arguments\n"); + printf("Kernel 1..."); + fflush(stdout); + // set kernel arguments for EAM_Force_1 + int err = 0; + int nArg = 0; + err = clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.r.x); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.r.y); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.r.z); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.f.x); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.f.y); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.f.z); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.U); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &localPot.rhobar); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &localPot.dfEmbed); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->boxes.neighborList); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->boxes.nNeighbors); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &localPot.nValues); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &localPot.phi); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &localPot.rho); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &localPot.F); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_real), &localPot.cutoff); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_int), &devSim->boxes.nLocalBoxes); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->boxes.nAtomsPfx); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set EAM_Force_1 arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + fflush(stdout); + exit(1); + } + else + { + printf("done\n"); + fflush(stdout); + } + + // set kernel arguments for EAM_Force_2 + printf("Kernel 2..."); + fflush(stdout); + err = 0; + nArg = 0; + err = clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &localPot.dfEmbed); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->atoms.U); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &localPot.rhobar); + + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &localPot.F); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &localPot.nValues); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_int), &devSim->boxes.nLocalBoxes); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->boxes.nAtomsPfx); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set EAM_Force_2 arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + fflush(stdout); + exit(1); + } + else + { + printf("done\n"); + fflush(stdout); + } + + // set kernel arguments for EAM_Force_3 + printf("Kernel 3..."); + err = 0; + nArg = 0; + err = clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.r.x); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.r.y); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.r.z); + + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.f.x); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.f.y); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.f.z); + + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &localPot.dfEmbed); + + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->boxes.neighborList); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->boxes.nNeighbors); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &localPot.nValues); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &localPot.rho); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_real), &localPot.cutoff); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_int), &devSim->boxes.nLocalBoxes); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->boxes.nAtomsPfx); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set EAM_Force_3 arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("done\n"); + } + +} + +void setEamArgsAos( cl_kernel *forceKernels, DevSimAos* devSim) +{ + /** Set the kernel arguments for the three EAM force computation kernels + **/ + + int err, nArg; + + printf("Setting EAM kernel arguments\n"); + printf("Kernel 1..."); + fflush(stdout); + // set kernel arguments for EAM_Force_1 + err = 0; + nArg = 0; + err = clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.r); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.f); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->atoms.U); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->eamPot.rhobar); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->eamPot.dfEmbed); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->domain.localMin); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->domain.localMax); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->boxes.neighborList); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->boxes.nNeighbors); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->eamPot.nValues); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->eamPot.phi); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->eamPot.rho); + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_mem), &devSim->eamPot.F); + + err |= clSetKernelArg(forceKernels[0], nArg++, sizeof(cl_real), &devSim->eamPot.cutoff); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set EAM_Force_1 arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + fflush(stdout); + } + else + { + printf("done\n"); + fflush(stdout); + } + + // set kernel arguments for EAM_Force_2 + printf("Kernel 2..."); + err = 0; + nArg = 0; + err = clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->eamPot.dfEmbed); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->atoms.U); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->eamPot.rhobar); + + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->eamPot.F); + err |= clSetKernelArg(forceKernels[1], nArg++, sizeof(cl_mem), &devSim->eamPot.nValues); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set EAM_Force_2 arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + fflush(stdout); + } + else + { + printf("done\n"); + fflush(stdout); + } + + // set kernel arguments for EAM_Force_3 + printf("Kernel 3..."); + err = 0; + nArg = 0; + // field arrays + err = clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.r); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->atoms.f); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->eamPot.dfEmbed); + // boxes data + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->domain.localMin); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->domain.localMax); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->boxes.neighborList); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->boxes.nNeighbors); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + //potential data + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->eamPot.nValues); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_mem), &devSim->eamPot.rho); + err |= clSetKernelArg(forceKernels[2], nArg++, sizeof(cl_real), &devSim->eamPot.cutoff); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set EAM_Force_3 arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + fflush(stdout); + exit(1); + } + else + { + printf("done\n"); + fflush(stdout); + } + +} + diff --git a/comd-cl/src-cl/eamCL.h b/comd-cl/src-cl/eamCL.h new file mode 100644 index 0000000..7cccc84 --- /dev/null +++ b/comd-cl/src-cl/eamCL.h @@ -0,0 +1,69 @@ +#ifndef EAMCL_H +#define EAMCL_H + +struct DevSimSoaSt; +struct DevSimAosSt; + +typedef struct HostEamPotSt +{ + // table values + cl_real* rho; + cl_real* phi; + cl_real* F; + cl_int* nValues; + // extra atom arrays for EAM + cl_real* rhobar; + cl_real* dfEmbed; + cl_real cutoff; + int rhoPotSize; + int phiPotSize; + int fPotSize; + // size of the atom arrays + int totalRealSize; +} HostEamPot; + +typedef struct DevEamPotSt +{ + // table values + cl_mem rho; + cl_mem phi; + cl_mem F; + cl_mem nValues; + // extra atom arrays for EAM + cl_mem rhobar; + cl_mem dfEmbed; + cl_real cutoff; +} DevEamPot; + +typedef struct HostEamChSt +{ + cl_real* rho; + cl_real* phi; + cl_real* F; + cl_int* nValues; + cl_real cutoff; + int rhoChebSize; + int phiChebSize; + int fChebSize; +} HostEamCh; + +typedef struct DevEamChSt +{ + cl_mem rho; + cl_mem phi; + cl_mem F; + cl_mem nValues; + cl_real cutoff; +} DevEamCh; + +void initHostEam(HostEamPot *hostEamPot, SimFlat *sim); + +void initDevEam(HostEamPot* hostEamPot, DevEamPot* devEamPot); + +void putEamPot(HostEamPot hostEamPot, DevEamPot devEamPot); + +void setEamArgsSoa(cl_kernel *forceKernels, struct DevSimSoaSt* devSimSoa); + +void setEamArgsAos(cl_kernel *forceKernels, struct DevSimAosSt* devSimSoa); + +#endif diff --git a/comd-cl/src-cl/eam_kernels.cl b/comd-cl/src-cl/eam_kernels.cl new file mode 100644 index 0000000..e6ad3bb --- /dev/null +++ b/comd-cl/src-cl/eam_kernels.cl @@ -0,0 +1,980 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +/** Kernels for computing the EAM potential + Since we can only block on kernel completion, the 3 sweeps done in the original code + need to be implemented as 3 separate kernels. + Note also that the potential arrays are large enough to require accessing them from + global memory. + Since OpenCL doesn't pick up #include properly, we need to manually switch real_t from + float to double in each kernel file individually. + + Note: More careful analysis shows we can consolidate kernels 1 and 2 into a single pass; + there is a flag PASS_2 in this file which should be set to match the flag PASS_2 in + helpers.c. Switching this flag allows you to test that a) the results match and 2) evaluate + the overhead of adding the extra kernel which only loops over all particles. + **/ + +//Initial implementation of the MD code +#define N_MAX_ATOMS 64 +#define N_MAX_NEIGHBORS 27 +#define PERIODIC 1 + +#define KERN_DIAG 0 +#define USE_SPLINE 0 +#define PASS_2 0 // this should match the setting in helpers.c + +#if defined(cl_khr_fp64) // Khronos extension available? +#pragma OPENCL EXTENSION cl_khr_fp64 : enable +#elif defined(cl_amd_fp64) // AMD extension available? +#pragma OPENCL EXTENSION cl_amd_fp64 : enable +#endif + +/* CL_REAL_T is set to single or double depending on compile time flags */ +typedef CL_REAL_T real_t; +typedef CL_REAL4_T cl_real4; + +int binSearch(global int *boxes, int n, int nboxes, int tot_atoms) +{ + int l = 0, r = nboxes - 1, mid = 0, box = 0; + + while(l <= r) + { + mid = (l + r)/2; + + if(n >= boxes[mid-1] && n < boxes[mid]) + { + box = mid; + break; + } + else if(mid == (nboxes - 1) && n >= boxes[mid] && n < tot_atoms) + { + box = mid + 1; + break; + } + else if(boxes[mid] > n) + r = mid - 1; + else + l = mid + 1; + } + + return (box == 0) ? 0 : box - 1; +} + +#if (USE_CHEBY) +// given a list of Chebyshev coefficients c, compute the value at x +// x must be in the range [a, b] +// call signature might change to put it in line with the regular EAM call +real_t chebev( + real_t a, + real_t b, + __global const real_t *c, + int m, + real_t x) +{ + real_t d, dd, sv, y, y2; + real_t ch; +#if(KERN_DIAG > 0) + if ((x-a)*(x-b) > 0.0) + { + printf("x not in range in chebev, %f\n", x); + } +#endif + d=0.0; + dd=0.0; + y=(2.0*x-a-b)/(b-a); + y2=2.0*y; + for (int j=m-1;j>0;j--) + { + sv=d; + d=y2*d-dd+c[j]; + dd=sv; + } + ch=y*d-dd+0.5*c[0]; + return ch; +} +/* Chebyshev interpolation routine modified to match the table lookup signature. + * Returns the value and derivative, ch and dch, at the position x + */ +void eamCheby( + real_t x, + __global const real_t* c, + const int m, + real_t *ch, + real_t *dch) +{ + // coefficients array c has Chebyshev coeffs, derivative coeffs and range limits + real_t a = c[2*m + 0]; + real_t b = c[2*m + 1]; + + real_t d, dd, sv, y, y2; +#if(KERN_DIAG > 0) + if ((x-a)*(x-b) > 0.0) + { + printf("x not in range in chebev, %f\n", x); + } +#endif + // compute the value + d=0.0; + dd=0.0; + y=(2.0*x-a-b)/(b-a); + y2=2.0*y; + for (int j=m-1;j>0;j--) + { + sv=d; + d=y2*d-dd+c[j]; + dd=sv; + } + *ch=y*d-dd+0.5*c[0]; + + // compute the derivative + // identical to above but c values offset by m + d=0.0; + dd=0.0; + y=(2.0*x-a-b)/(b-a); + y2=2.0*y; + for (int j=m-1;j>0;j--) + { + sv=d; + d=y2*d-dd+c[j+m]; + dd=sv; + } + *dch=y*d-dd+0.5*c[0+m]; +} + +#endif + +#if (USE_SPLINE) +void PhiSpline(real_t r, real_t *f, real_t *df) +{ + // values for copper + /* + // original values from 87 paper + real_t a_k[6] = { 29.059214 , -140.05681 , 130.07331 , -17.48135 , 31.82546 , 71.58749}; + real_t r_k[6] = { 1.2247449 , 1.1547054 , 1.1180065 , 1.0000000 , 0.8660254 , 0.7071068}; + */ + // new values for smoother potential + real_t a_k[6] = {61.73525861, -108.18467800, 57.00053948,-12.88796578, 39.16381901, 0.0}; + real_t r_k[6] = {1.225, 1.202, 1.154, 1.050, 0.866, 0.707}; + real_t az = 1.0*3.615; + real_t az3 = az*az*az; + real_t az2 = az*az; + // set output values to zero + *f=0.0; + *df=0.0; + //r = 1.0; //3.615; + r = r/3.615; + //printf("r = %e\n", r); + // sum over all coefficients + for (int k=0;k<6;k++) + { + r_k[k] = r_k[k]*3.615; + if (r < r_k[k]) + { + *f += (r_k[k]-r)*(r_k[k]-r)*(r_k[k]-r)*a_k[k]/az3; + *df -= 3.0*(r_k[k]-r)*(r_k[k]-r)*a_k[k]/az2; + } + } +} + +void RhoSpline(real_t r, real_t *f, real_t *df) +{ + // values for copper + /* + // original values from 87 paper + real_t R_k[2] = { 1.2247449 , 1.0000000 }; + real_t A_k[2] = { 9.806694 , 16.774638 }; + */ + // new values for smoother potential + real_t R_k[2] = { 1.225, 0.990 }; + real_t A_k[2] = { 10.03718305, 17.06363299 }; + real_t az = 1.0*3.615; + real_t az3 = az*az*az; + real_t az2 = az*az; + // set output values to zero + *f=0.0; + *df=0.0; + //r = 1.0; //3.615; + r = r/3.615; + // sum over all coefficients + for (int k=0;k<2;k++) + { + R_k[k] = R_k[k]*3.615; + if (r < R_k[k]) + { + *f += (R_k[k]-r)*(R_k[k]-r)*(R_k[k]-r)*A_k[k]/az3; + *df -= 3.0*(R_k[k]-r)*(R_k[k]-r)*A_k[k]/az2; + } + } +} + +void FSpline(real_t rho, real_t *f, real_t *df) +{ + *f = -1.0*sqrt(rho); + *df = -0.5/(*f); +} + +#endif + +void eamInterpolateDeriv(real_t r, + __global const real_t* values, + const int nValues, + real_t *value1, + real_t *f1) +{ + int i1; + int i; + real_t gi, gi1; + + // extract values from potential 'struct' + real_t x0 = values[nValues+3]; + real_t xn = values[nValues+4]; + real_t invDx = values[nValues+5]; + + // identical to Sriram's loop in eam.c + if ( rxn) r = xn; + + r = (r-x0)*(invDx) ; + i1 = (int)trunc((float)r); + + /* reset r to fractional distance */ + r = r - (int)trunc((float)r); + + // all indices shifted up by one compared to the original code + gi = values[i1+2] - values[i1]; + gi1 = values[i1+3] - values[i1+1]; + + // Note the shift removes [i1-1] as a possibility + // values[i1-1] is guaranteed(?) inbounds because + // a->x0 = x0 + (xn-x0)/(double)n; + // appears in allocPotentialArray + *value1 = values[i1+1] + 0.5*r*( + r*(values[i1+2]+ values[i1] -2.0*values[i1+1]) + + gi + ); + if(i1<=1) + *f1 = 0.0; + else + *f1 = 0.5*(gi + r*(gi1-gi))*invDx; + + return; + +} + +// Simple version without local blocking to check for correctness +__kernel void EAM_Force_1( + __global real_t* xPos, + __global real_t* yPos, + __global real_t* zPos, + + __global real_t* fx, + __global real_t* fy, + __global real_t* fz, + + __global real_t* energy, + __global real_t* rho, + __global real_t* rhobar, + + __global const int* neighborList, + __global const int* nNeighbors, + __global const int* nAtoms, + + __global const int* nValues, + + __global const real_t* phi_pot, // the potentials are passed in as real arrays: x0, xn, invDx, values[?] + __global const real_t* rho_pot, + __global const real_t* F_pot, + + const real_t cutoff, + const int boxSize, + global int *boxes + ) +{ +#if USE_SPLINE + // values for copper + real_t a_k[6] = { 29.059214 , -140.05681 , 130.07331 , -17.48135 , 31.82546 , 71.58749}; + real_t r_k[6] = { 1.2247449 , 1.1547054 , 1.1180065 , 1.0000000 , 0.8660254 , 0.7071068}; + + real_t R_k[2] = { 1.2247449 , 1.0000000 }; + real_t A_k[2] = { 9.806694 , 16.774638 }; +#endif + +// int iAtom = get_global_id(0); +// int iBox = get_global_id(1); + + // prefix sum array to compute iBox + int tid = get_global_id(0); + int iBox = binSearch(boxes, tid, boxSize, get_global_size(0)); + + int iAtom = tid - boxes[iBox]; + + real_t dx, dy, dz; + real_t r, r2, r6; + real_t fr, e_i; + real_t rho_i; + + // accumulate local force value + real_t fx_i, fy_i, fz_i; + + real_t rCut = cutoff; + real_t rCut2 = rCut*rCut; + real_t rhoTmp; + real_t phiTmp; + real_t dPhi, dRho; + real_t fi, fiprime; + + int i; + int j_local; + + int i_offset; + int iParticle; + + // zero out forces on particles + i_offset = iBox*N_MAX_ATOMS; + iParticle = i_offset + iAtom; + + fx_i = 0.0; + fy_i = 0.0; + fz_i = 0.0; + + rho_i = 0.0; + + e_i = 0.0; + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + +#if(KERN_DIAG > 0) + printf("i = %d, %f, %f, %f\n", iParticle, xPos[iParticle], yPos[iParticle], zPos[iParticle]); + + printf("iBox = %d, nNeighbors = %d\n", iBox, nNeighbors[iBox]); +#endif + + for (int j = 0; j 0) + printf("dx, dy, dz = %f, %f, %f\n", dx, dy, dz); + printf("i = %d, j = %d, %f, %f, %f\n", iParticle, jParticle, xPos[jParticle], yPos[jParticle], zPos[jParticle]); +#endif + + r2 = dx*dx + dy*dy + dz*dz; + + if ( r2 <= rCut2 && r2 > 0.0) + {// no divide by zero + +#if(KERN_DIAG > 0) + printf("%d, %d, %f\n", iParticle, jParticle, r2); + printf("r2, rCut2 = %f, %f\n", r2, rCut2); +#endif + + r = sqrt(r2); + //r = 1.0; + +/* +#if(USE_SPLINE) + //r = r*r_k[0]/cutoff; + //r = r/3.615; + PhiSpline(r, &phiTmp, &dPhi); + RhoSpline(r, &rhoTmp, &dRho); + */ +#if (USE_CHEBY) + eamCheby(r, phi_pot, nValues[0], &phiTmp, &dPhi); + eamCheby(r, rho_pot, nValues[1], &rhoTmp, &dRho); +#else + eamInterpolateDeriv(r, phi_pot, nValues[0], &phiTmp, &dPhi); + eamInterpolateDeriv(r, rho_pot, nValues[1], &rhoTmp, &dRho); +#endif + +#if(KERN_DIAG > 0) + printf("%d, %d, %f\n", iParticle, jParticle, r2); + printf("iParticle = %d, jParticle = %d, phiTmp = %f, dPhi = %f\n", iParticle, jParticle, phiTmp, dPhi); + printf("iParticle = %d, jParticle = %d, rhoTmp = %f, dRho = %f\n", iParticle, jParticle, rhoTmp, dRho); +#endif + +#if(USE_SPLINE) + fx_i += (dRho+dPhi)*dx/r; + fy_i += (dRho+dPhi)*dy/r; + fz_i += (dRho+dPhi)*dz/r; +#else + fx_i += dPhi*dx/r; + fy_i += dPhi*dy/r; + fz_i += dPhi*dz/r; +#endif + + e_i += phiTmp; + + rho_i += rhoTmp; + + } else { + } + + + } // loop over all atoms + } // loop over neighbor cells + + fx[iParticle] = fx_i; + fy[iParticle] = fy_i; + fz[iParticle] = fz_i; + + // since we loop over all particles, each particle contributes 1/2 the pair energy to the total + //energy[iParticle] = e_i*0.5; + + rho[iParticle] = rho_i; + + // we can actually include the Force_2 kernel here, to save some time! + // skip the next 4 lines if PASS_2 = 1 in helpers.c +#if(PASS_2 == 0) +#if (USE_CHEBY) + eamCheby(rho_i,F_pot,nValues[2],&fi,&fiprime); +#else + eamInterpolateDeriv(rho_i,F_pot,nValues[2],&fi,&fiprime); +#endif + rhobar[iParticle] = fiprime; // update rhoprime + //update energy terms + energy[iParticle] = e_i*0.5 + fi; +#else + energy[iParticle] = e_i*0.5; +#endif + } else { // zero out the energy of the other particles for safety + energy[iParticle] = 0.0; + } +} + +__kernel void EAM_Force_2( + __global real_t* rhobar, + __global real_t* energy, + __global real_t* rho, + __global const int* nAtoms, + __global const real_t* F_pot, + __global const int* nValues, + const int boxSize, + global int *boxes + ) +{ + + // int iAtom = get_global_id(0); +// int iBox = get_global_id(1); + + // prefix sum array to compute iBox + int tid = get_global_id(0); + int iBox = binSearch(boxes, tid, boxSize, get_global_size(0)); + + int iAtom = tid - boxes[iBox]; + + real_t fi, fiprime; + + int i_offset; + int iParticle; + + i_offset = iBox*N_MAX_ATOMS; + iParticle = i_offset + iAtom; + + /* + // local copy of F potential + real_t F_local[nValues+3]; + + // load values into local potentials + for (int i=0;i 0) + + printf("i = %d, %f, %f, %f\n", iParticle, xPos[iParticle], yPos[iParticle], zPos[iParticle]); + + printf("iBox = %d, nNeighbors = %d\n", iBox, nNeighbors[iBox]); +#endif + + for (int j = 0; j 0) + printf("dx, dy, dz = %f, %f, %f\n", dx, dy, dz); + printf("i = %d, j = %d, %f, %f, %f\n", iParticle, jParticle, xPos[jParticle], yPos[jParticle], zPos[jParticle]); +#endif + + r2 = dx*dx + dy*dy + dz*dz; + + if ( r2 < rCut2 && r2 > 0.0) + {// no divide by zero + +#if(KERN_DIAG > 0) + printf("r2, rCut2 = %f, %f\n", r2, rCut2); + printf("%d, %d, %f\n", iParticle, jParticle, r2); +#endif + + r = sqrt(r2); + +/* +#if (USE_SPLINE) + RhoSpline(r, &rhoTmp, &dRho); +#else + */ +#if (USE_CHEBY) + eamCheby(r, rho_pot, nValues[1], &rhoTmp, &dRho); +#else + eamInterpolateDeriv(r, rho_pot, nValues[1], &rhoTmp, &dRho); +#endif + rhoijprime = dRho; + +#if(KERN_DIAG > 0) + printf("%d, %d, %f\n", iParticle, jParticle, r2); +#endif + + rTmp = (fi[iParticle]+fi[jParticle])*rhoijprime/r; + + fx_i += (fi[iParticle]+fi[jParticle])*rhoijprime*dx/r; + fy_i += (fi[iParticle]+fi[jParticle])*rhoijprime*dy/r; + fz_i += (fi[iParticle]+fi[jParticle])*rhoijprime*dz/r; + /* + fx_i += rTmp*dx; + fy_i += rTmp*dy; + fz_i += rTmp*dz; + */ + + } else { + } + + + } // loop over all atoms in jBox + } // loop over neighbor cells + +#if (USE_SPLINE) +#else + fx[iParticle] = fx_i; + fy[iParticle] = fy_i; + fz[iParticle] = fz_i; +#endif + + } // loop over all atoms in iBox +} + +// AoS Versions +// Simple version without local blocking to check for correctness +__kernel void EAM_Force_1_AoS( + __global cl_real4* pos, + + __global cl_real4* f, + + __global real_t* energy, + __global real_t* rho, + __global real_t* rhobar, + + __global const int* neighborList, + __global const int* nNeighbors, + __global const int* nAtoms, + + __global const int* nValues, + + __global const real_t* phi_pot, // the potentials are passed in as real arrays: x0, xn, invDx, values[?] + __global const real_t* rho_pot, + __global const real_t* F_pot, + + const real_t cutoff) +{ + + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + real_t r, r2, r6; + real_t fr, e_i; + real_t rho_i; + + cl_real4 dr; + cl_real4 f_i; + + real_t rCut = cutoff; + real_t rCut2 = rCut*rCut; + real_t rhoTmp; + real_t phiTmp; + real_t dPhi, dRho; + real_t fi, fiprime; + + int i; + int j_local; + + int i_offset; + int iParticle; + + i_offset = iBox*N_MAX_ATOMS; + iParticle = i_offset + iAtom; + + // zero out forces on particles + f_i.x = 0.0; + f_i.y = 0.0; + f_i.z = 0.0; + + rho_i = 0.0; + + e_i = 0.0; + + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + +#if(KERN_DIAG > 0) + printf("i = %d, %f, %f, %f\n", iParticle, pos[iParticle].x, pos[iParticle].y, pos[iParticle].z); + + printf("iBox = %d, nNeighbors = %d\n", iBox, nNeighbors[iBox]); +#endif + + for (int j = 0; j 0) + printf("dx, dy, dz = %f, %f, %f\n", dr.x, dr.y, dr.z); + printf("i = %d, j = %d, %f, %f, %f\n", + iParticle, jParticle, pos[jParticle].x, pos[jParticle].y, pos[jParticle].z); +#endif + + r2 = dr.x*dr.x + dr.y*dr.y + dr.z*dr.z; + + if ( r2 <= rCut2 && r2 > 0.0) + {// no divide by zero + +#if(KERN_DIAG > 0) + printf("%d, %d, %f\n", iParticle, jParticle, r2); + printf("r2, rCut2 = %f, %f\n", r2, rCut2); +#endif + + r = sqrt(r2); + + eamInterpolateDeriv(r, phi_pot, nValues[0], &phiTmp, &dPhi); + eamInterpolateDeriv(r, rho_pot, nValues[1], &rhoTmp, &dRho); + +#if(KERN_DIAG > 0) + printf("%d, %d, %f\n", iParticle, jParticle, r2); + printf("iParticle = %d, jParticle = %d, phiTmp = %f, dPhi = %f\n", iParticle, jParticle, phiTmp, dPhi); + printf("iParticle = %d, jParticle = %d, rhoTmp = %f, dRho = %f\n", iParticle, jParticle, rhoTmp, dRho); +#endif + + f_i.x += dPhi*dr.x/r; + f_i.y += dPhi*dr.y/r; + f_i.z += dPhi*dr.z/r; + + e_i += phiTmp; + + rho_i += rhoTmp; + + } else { + } + + + } // loop over all atoms + } // loop over neighbor cells + + f[iParticle] = f_i; + + // since we loop over all particles, each particle contributes 1/2 the pair energy to the total + //energy[iParticle] = e_i*0.5; + + rho[iParticle] = rho_i; + +#if(PASS_2 == 0) + eamInterpolateDeriv(rho_i,F_pot,nValues[2],&fi,&fiprime); + rhobar[iParticle] = fiprime; // update rhoprime + //update energy terms + energy[iParticle] = e_i*0.5 + fi; +#else + energy[iParticle] = e_i*0.5; +#endif + } +} + +__kernel void EAM_Force_2_AoS( + __global real_t* rhobar, + __global real_t* energy, + __global real_t* rho, + __global const int* nAtoms, + __global const real_t* F_pot, + __global const int* nValues + ) +{ + + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + real_t fi, fiprime; + + + int i; + + int i_offset; + int iParticle; + + i_offset = iBox*N_MAX_ATOMS; + iParticle = i_offset + iAtom; + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + + +#if(KERN_DIAG > 0) + printf("iBox = %d, iAtom = %d\n", iBox, iAtom); +#endif + + eamInterpolateDeriv(rho[iParticle],F_pot,nValues[2],&fi,&fiprime); + rhobar[iParticle] = fiprime; // update rhoprime + //update energy terms + energy[iParticle] += fi; + + } + +} +__kernel void EAM_Force_3_AoS( + __global cl_real4* pos, + + __global cl_real4* f, + + __global real_t* fi, + + __global const int* neighborList, + __global const int* nNeighbors, + __global const int* nAtoms, + + __global const int* nValues, + __global const real_t* rho_pot, + const real_t cutoff) +{ + + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + cl_real4 dr; + real_t r, r2; + + cl_real4 drBox; + + // accumulate local force value + cl_real4 f_i; + + real_t rCut = cutoff; + real_t rCut2 = rCut*rCut; + real_t rhoTmp, dRho; + + int i; + int j_local; + + real_t rTmp, rhoijprime; + + // global offset of local thread + int i_offset = iBox*N_MAX_ATOMS; + int iParticle = i_offset + iAtom; + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + + // zero out forces on particles + f_i.x = f[iParticle].x; + f_i.y = f[iParticle].y; + f_i.z = f[iParticle].z; + +#if(KERN_DIAG > 0) + printf("i = %d, %f, %f, %f\n", iParticle, pos[iParticle].x, pos[iParticle].y, pos[iParticle].z); + printf("iBox = %d, nNeighbors = %d\n", iBox, nNeighbors[iBox]); +#endif + + for (int j = 0; j 0) + printf("dx, dy, dz = %f, %f, %f\n", dr.x, dr.y, dr.z); + printf("i = %d, j = %d, %f, %f, %f\n", iParticle, jParticle, pos[jParticle].x, pos[jParticle].y, pos[jParticle].z); +#endif + + r2 = dr.x*dr.x + dr.y*dr.y + dr.z*dr.z; + + if ( r2 < rCut2 && r2 > 0.0) + {// no divide by zero + +#if(KERN_DIAG > 0) + printf("r2, rCut = %f, %f\n", r2, rCut); + printf("%d, %d, %f\n", iParticle, jParticle, r2); +#endif + + r = sqrt(r2); + + eamInterpolateDeriv(r, rho_pot, nValues[1], &rhoTmp, &dRho); + rhoijprime = dRho; + +#if(KERN_DIAG > 0) + printf("%d, %d, %f\n", iParticle, jParticle, r2); +#endif + + rTmp = (fi[iParticle]+fi[jParticle])*rhoijprime/r; + + /* + f_i.x += (fi[iParticle]+fi[jParticle])*rhoijprime*dr.x/r; + f_i.y += (fi[iParticle]+fi[jParticle])*rhoijprime*dr.y/r; + f_i.z += (fi[iParticle]+fi[jParticle])*rhoijprime*dr.z/r; + */ + f_i.x += rTmp*dr.x; + f_i.y += rTmp*dr.y; + f_i.z += rTmp*dr.z; + + } else { + } + + + } // loop over all atoms in jBox + } // loop over neighbor cells + + f[iParticle] = f_i; + + } // loop over all atoms in iBox +} + diff --git a/comd-cl/src-cl/generate_info_header b/comd-cl/src-cl/generate_info_header new file mode 100755 index 0000000..c3b6500 --- /dev/null +++ b/comd-cl/src-cl/generate_info_header @@ -0,0 +1,75 @@ +#!/bin/bash + +comd_variant=${1} +cc=`which ${1}` +cflags=${2} +ldflags=${3} +errcode="$?" +if [ ${errcode} != "0" ] ; then +cc="unknown"; +fi +echo "CC: ${cc}" + +cc_ver=`${1} --version 2>&1` +errcode="$?" +if [ ${errcode} != "0" ] ; then +cc_ver=`${1} -V 2>&1`; +errcode="$?" +if [ ${errcode} != "0" ] ; then +cc_ver="unknown"; +fi +fi + +cc_ver=${cc_ver// /@} +cc_version="" +for i in $(echo ${cc_ver}); +do + if [ "$cc_version" == "" ]; then + cc_version=$i; + fi +done +cc_version=${cc_version//@/ } +echo "Compiler version: ${cc_version}" + +hostname=`uname -n` +errcode="$?" +if [ ${errcode} != "0" ] ; then +hostname="unknown"; +fi + +kern_name=`uname -s` +errcode="$?" +if [ ${errcode} != "0" ] ; then +kern_name="unknown"; +fi + +kern_rel=`uname -r` +errcode="$?" +if [ ${errcode} != "0" ] ; then +kern_rel="unknown"; +fi + +proc=`uname -p` +errcode="$?" +if [ ${errcode} != "0" ] ; then +proc="unknown"; +fi + + +cat << END_CAT > CoMD_info.h +#ifndef CoMD_info_hpp +#define CoMD_info_hpp + +#define CoMD_VARIANT "${comd_variant}" +#define CoMD_HOSTNAME "${hostname}" +#define CoMD_KERNEL_NAME "'${kern_name}'" +#define CoMD_KERNEL_RELEASE "'${kern_rel}'" +#define CoMD_PROCESSOR "'${proc}'" + +#define CoMD_COMPILER "'${cc}'" +#define CoMD_COMPILER_VERSION "'${cc_version}'" +#define CoMD_CFLAGS "'${cflags}'" +#define CoMD_LDFLAGS "'${ldflags}'" + +#endif +END_CAT diff --git a/comd-cl/src-cl/haloExchange.c b/comd-cl/src-cl/haloExchange.c new file mode 100644 index 0000000..a6c3b52 --- /dev/null +++ b/comd-cl/src-cl/haloExchange.c @@ -0,0 +1,665 @@ +/// \file +/// Communicate halo data such as "ghost" atoms with neighboring tasks. +/// In addition to ghost atoms, the EAM potential also needs to exchange +/// some force information. Hence this file implements both an atom +/// exchange and a force exchange, each with slightly different +/// properties due to their different roles. +/// +/// The halo exchange in CoMD 1.1 takes advantage of the Cartesian domain +/// decomposition as well as the link cell structure to quickly +/// determine what data needs to be sent. +/// +/// This halo exchange implementation is able to send data to all 26 +/// neighboring tasks using only 6 messages. This is accomplished by +/// sending data across the x-faces, then the y-faces, and finally +/// across the z-faces. Some of the data that was received from the +/// x-faces is included in the y-face sends and so on. This +/// accumulation of data allows data to reach edge neighbors and corner +/// neighbors by a two or three step process. +/// +/// The advantage of this type of structured halo exchange is that it +/// minimizes the number of MPI messages to send, and maximizes the size +/// of those messages. +/// +/// The disadvantage of this halo exchange is that it serializes message +/// traffic. Only two messages can be in flight at once. The x-axis +/// messages must be received and processed before the y-axis messages +/// can begin. Architectures with low message latency and many off node +/// network links would likely benefit from alternate halo exchange +/// strategies that send independent messages to each neighbor task. + +#include "haloExchange.h" + +#include + +#include "CoMDTypes.h" +#include "decomposition.h" +#include "parallel.h" +#include "linkCells.h" +#include "eam.h" +#include "memUtils.h" +#include "performanceTimers.h" + +#define MAX(A,B) ((A) > (B) ? (A) : (B)) + +/// Don't change the order of the faces in this enum. +enum HaloFaceOrder {HALO_X_MINUS, HALO_X_PLUS, + HALO_Y_MINUS, HALO_Y_PLUS, + HALO_Z_MINUS, HALO_Z_PLUS}; + +/// Don't change the order of the axes in this enum. +enum HaloAxisOrder {HALO_X_AXIS, HALO_Y_AXIS, HALO_Z_AXIS}; + +/// Extra data members that are needed for the exchange of atom data. +/// For an atom exchange, the HaloExchangeSt::parms will point to a +/// structure of this type. +typedef struct AtomExchangeParmsSt +{ + int nCells[6]; //!< Number of cells in cellList for each face. + int* cellList[6]; //!< List of link cells from which to load data for each face. + real_t* pbcFactor[6]; //!< Whether this face is a periodic boundary. +} +AtomExchangeParms; + +/// Extra data members that are needed for the exchange of force data. +/// For an force exchange, the HaloExchangeSt::parms will point to a +/// structure of this type. +typedef struct ForceExchangeParmsSt +{ + int nCells[6]; //!< Number of cells to send/recv for each face. + int* sendCells[6]; //!< List of link cells to send for each face. + int* recvCells[6]; //!< List of link cells to recv for each face. +} +ForceExchangeParms; + +/// A structure to package data for a single atom to pack into a +/// send/recv buffer. Also used for sorting atoms within link cells. +typedef struct AtomMsgSt +{ + int gid; + int type; + real_t rx, ry, rz; + real_t px, py, pz; +} +AtomMsg; + +/// Package data for the force exchange. +typedef struct ForceMsgSt +{ + real_t dfEmbed; +} +ForceMsg; + +static HaloExchange* initHaloExchange(Domain* domain); +static void exchangeData(HaloExchange* haloExchange, void* data, int iAxis); + +static int* mkAtomCellList(LinkCell* boxes, enum HaloFaceOrder iFace, const int nCells); +static int loadAtomsBuffer(void* vparms, void* data, int face, char* charBuf); +static void unloadAtomsBuffer(void* vparms, void* data, int face, int bufSize, char* charBuf); +static void destroyAtomsExchange(void* vparms); + +static int* mkForceSendCellList(LinkCell* boxes, int face, int nCells); +static int* mkForceRecvCellList(LinkCell* boxes, int face, int nCells); +static int loadForceBuffer(void* vparms, void* data, int face, char* charBuf); +static void unloadForceBuffer(void* vparms, void* data, int face, int bufSize, char* charBuf); +static void destroyForceExchange(void* vparms); +static int sortAtomsById(const void* a, const void* b); + +/// \details +/// When called in proper sequence by redistributeAtoms, the atom halo +/// exchange helps serve three purposes: +/// - Send ghost atom data to neighbor tasks. +/// - Shift atom coordinates by the global simulation size when they cross +/// periodic boundaries. This shift is performed in loadAtomsBuffer. +/// - Transfer ownership of atoms between tasks as the atoms move across +/// spatial domain boundaries. This transfer of ownership occurs in +/// two places. The former owner gives up ownership when +/// updateLinkCells moves a formerly local atom into a halo link cell. +/// The new owner accepts ownership when unloadAtomsBuffer calls +/// putAtomInBox to place a received atom into a local link cell. +/// +/// This constructor does the following: +/// +/// - Sets the bufCapacity to hold the largest possible number of atoms +/// that can be sent across a face. +/// - Initialize function pointers to the atom-specific versions +/// - Sets the number of link cells to send across each face. +/// - Builds the list of link cells to send across each face. As +/// explained in the comments for mkAtomCellList, this list must +/// include any link cell, local or halo, that could possibly contain +/// an atom that needs to be sent across the face. Atoms that need to +/// be sent include "ghost atoms" that are located in local link +/// cells that correspond to halo link cells on receiving tasks as well as +/// formerly local atoms that have just moved into halo link cells and +/// need to be sent to the rank that owns the spatial domain the atom +/// has moved into. +/// - Sets a coordinate shift factor for each face to account for +/// periodic boundary conditions. For most faces the factor is zero. +/// For faces on the +x, +y, or +z face of the simulation domain +/// the factor is -1.0 (to shift the coordinates by -1 times the +/// simulation domain size). For -x, -y, and -z faces of the +/// simulation domain, the factor is +1.0. +/// +/// \see redistributeAtoms +HaloExchange* initAtomHaloExchange(Domain* domain, LinkCell* boxes) +{ + HaloExchange* hh = initHaloExchange(domain); + + int size0 = (boxes->gridSize[1]+2)*(boxes->gridSize[2]+2); + int size1 = (boxes->gridSize[0]+2)*(boxes->gridSize[2]+2); + int size2 = (boxes->gridSize[0]+2)*(boxes->gridSize[1]+2); + int maxSize = MAX(size0, size1); + maxSize = MAX(size1, size2); + hh->bufCapacity = maxSize*2*MAXATOMS*sizeof(AtomMsg); + + hh->loadBuffer = loadAtomsBuffer; + hh->unloadBuffer = unloadAtomsBuffer; + hh->destroy = destroyAtomsExchange; + + AtomExchangeParms* parms = comdMalloc(sizeof(AtomExchangeParms)); + + parms->nCells[HALO_X_MINUS] = 2*(boxes->gridSize[1]+2)*(boxes->gridSize[2]+2); + parms->nCells[HALO_Y_MINUS] = 2*(boxes->gridSize[0]+2)*(boxes->gridSize[2]+2); + parms->nCells[HALO_Z_MINUS] = 2*(boxes->gridSize[0]+2)*(boxes->gridSize[1]+2); + parms->nCells[HALO_X_PLUS] = parms->nCells[HALO_X_MINUS]; + parms->nCells[HALO_Y_PLUS] = parms->nCells[HALO_Y_MINUS]; + parms->nCells[HALO_Z_PLUS] = parms->nCells[HALO_Z_MINUS]; + + for (int ii=0; ii<6; ++ii) + parms->cellList[ii] = mkAtomCellList(boxes, ii, parms->nCells[ii]); + + for (int ii=0; ii<6; ++ii) + { + parms->pbcFactor[ii] = comdMalloc(3*sizeof(real_t)); + for (int jj=0; jj<3; ++jj) + parms->pbcFactor[ii][jj] = 0.0; + } + int* procCoord = domain->procCoord; //alias + int* procGrid = domain->procGrid; //alias + if (procCoord[HALO_X_AXIS] == 0) parms->pbcFactor[HALO_X_MINUS][HALO_X_AXIS] = +1.0; + if (procCoord[HALO_X_AXIS] == procGrid[HALO_X_AXIS]-1) parms->pbcFactor[HALO_X_PLUS][HALO_X_AXIS] = -1.0; + if (procCoord[HALO_Y_AXIS] == 0) parms->pbcFactor[HALO_Y_MINUS][HALO_Y_AXIS] = +1.0; + if (procCoord[HALO_Y_AXIS] == procGrid[HALO_Y_AXIS]-1) parms->pbcFactor[HALO_Y_PLUS][HALO_Y_AXIS] = -1.0; + if (procCoord[HALO_Z_AXIS] == 0) parms->pbcFactor[HALO_Z_MINUS][HALO_Z_AXIS] = +1.0; + if (procCoord[HALO_Z_AXIS] == procGrid[HALO_Z_AXIS]-1) parms->pbcFactor[HALO_Z_PLUS][HALO_Z_AXIS] = -1.0; + + hh->parms = parms; + return hh; +} + +/// The force exchange is considerably simpler than the atom exchange. +/// In the force case we only need to exchange data that is needed to +/// complete the force calculation. Since the atoms have not moved we +/// only need to send data from local link cells and we are guaranteed +/// that the same atoms exist in the same order in corresponding halo +/// cells on remote tasks. The only tricky part is the size of the +/// plane of local cells that needs to be sent grows in each direction. +/// This is because the y-axis send must send some of the data that was +/// received from the x-axis send, and the z-axis must send some data +/// from the y-axis send. This accumulation of data to send is +/// responsible for data reaching neighbor cells that share only edges +/// or corners. +/// +/// \see eam.c for an explanation of the requirement to exchange +/// force data. +HaloExchange* initForceHaloExchange(Domain* domain, LinkCell* boxes) +{ + HaloExchange* hh = initHaloExchange(domain); + + hh->loadBuffer = loadForceBuffer; + hh->unloadBuffer = unloadForceBuffer; + hh->destroy = destroyForceExchange; + + int size0 = (boxes->gridSize[1])*(boxes->gridSize[2]); + int size1 = (boxes->gridSize[0]+2)*(boxes->gridSize[2]); + int size2 = (boxes->gridSize[0]+2)*(boxes->gridSize[1]+2); + int maxSize = MAX(size0, size1); + maxSize = MAX(size1, size2); + hh->bufCapacity = (maxSize)*MAXATOMS*sizeof(ForceMsg); + + ForceExchangeParms* parms = comdMalloc(sizeof(ForceExchangeParms)); + + parms->nCells[HALO_X_MINUS] = (boxes->gridSize[1] )*(boxes->gridSize[2] ); + parms->nCells[HALO_Y_MINUS] = (boxes->gridSize[0]+2)*(boxes->gridSize[2] ); + parms->nCells[HALO_Z_MINUS] = (boxes->gridSize[0]+2)*(boxes->gridSize[1]+2); + parms->nCells[HALO_X_PLUS] = parms->nCells[HALO_X_MINUS]; + parms->nCells[HALO_Y_PLUS] = parms->nCells[HALO_Y_MINUS]; + parms->nCells[HALO_Z_PLUS] = parms->nCells[HALO_Z_MINUS]; + + for (int ii=0; ii<6; ++ii) + { + parms->sendCells[ii] = mkForceSendCellList(boxes, ii, parms->nCells[ii]); + parms->recvCells[ii] = mkForceRecvCellList(boxes, ii, parms->nCells[ii]); + } + + hh->parms = parms; + return hh; +} + +void destroyHaloExchange(HaloExchange** haloExchange) +{ + (*haloExchange)->destroy((*haloExchange)->parms); + free(*haloExchange); + *haloExchange = NULL; +} + +void haloExchange(HaloExchange* haloExchange, void* data) +{ + for (int iAxis=0; iAxis<3; ++iAxis) + exchangeData(haloExchange, data, iAxis); +} + +/// Base class constructor. +HaloExchange* initHaloExchange(Domain* domain) +{ + HaloExchange* hh = comdMalloc(sizeof(HaloExchange)); + + // Rank of neighbor task for each face. + hh->nbrRank[HALO_X_MINUS] = processorNum(domain, -1, 0, 0); + hh->nbrRank[HALO_X_PLUS] = processorNum(domain, +1, 0, 0); + hh->nbrRank[HALO_Y_MINUS] = processorNum(domain, 0, -1, 0); + hh->nbrRank[HALO_Y_PLUS] = processorNum(domain, 0, +1, 0); + hh->nbrRank[HALO_Z_MINUS] = processorNum(domain, 0, 0, -1); + hh->nbrRank[HALO_Z_PLUS] = processorNum(domain, 0, 0, +1); + hh->bufCapacity = 0; // will be set by sub-class. + + return hh; +} + +/// This is the function that does the heavy lifting for the +/// communication of halo data. It is called once for each axis and +/// sends and receives two message. Loading and unloading of the +/// buffers is in the hands of the sub-class virtual functions. +/// +/// \param [in] iAxis Axis index. +/// \param [in, out] data Pointer to data that will be passed to the load and +/// unload functions +void exchangeData(HaloExchange* haloExchange, void* data, int iAxis) +{ + enum HaloFaceOrder faceM = 2*iAxis; + enum HaloFaceOrder faceP = faceM+1; + + char* sendBufM = comdMalloc(haloExchange->bufCapacity); + char* sendBufP = comdMalloc(haloExchange->bufCapacity); + char* recvBufM = comdMalloc(haloExchange->bufCapacity); + char* recvBufP = comdMalloc(haloExchange->bufCapacity); + + int nSendM = haloExchange->loadBuffer(haloExchange->parms, data, faceM, sendBufM); + int nSendP = haloExchange->loadBuffer(haloExchange->parms, data, faceP, sendBufP); + + int nbrRankM = haloExchange->nbrRank[faceM]; + int nbrRankP = haloExchange->nbrRank[faceP]; + + int nRecvM, nRecvP; + + startTimer(commHaloTimer); + nRecvP = sendReceiveParallel(sendBufM, nSendM, nbrRankM, recvBufP, haloExchange->bufCapacity, nbrRankP); + nRecvM = sendReceiveParallel(sendBufP, nSendP, nbrRankP, recvBufM, haloExchange->bufCapacity, nbrRankM); + stopTimer(commHaloTimer); + + haloExchange->unloadBuffer(haloExchange->parms, data, faceM, nRecvM, recvBufM); + haloExchange->unloadBuffer(haloExchange->parms, data, faceP, nRecvP, recvBufP); + comdFree(recvBufP); + comdFree(recvBufM); + comdFree(sendBufP); + comdFree(sendBufM); +} + +/// Make a list of link cells that need to be sent across the specified +/// face. For each face, the list must include all cells, local and +/// halo, in the first two planes of link cells. Halo cells must be +/// included in the list of link cells to send since local atoms may +/// have moved from local cells into halo cells on this time step. +/// (Actual remote atoms should have been deleted, so the halo cells +/// should contain only these few atoms that have just crossed.) +/// Sending these atoms will allow them to be reassigned to the task +/// that covers the spatial domain they have moved into. +/// +/// Note that link cell grid coordinates range from -1 to gridSize[iAxis]. +/// \see initLinkCells for an explanation link cell grid coordinates. +/// +/// \param [in] boxes Link cell information. +/// \param [in] iFace Index of the face data will be sent across. +/// \param [in] nCells Number of cells to send. This is used for a +/// consistency check. +/// \return The list of cells to send. Caller is responsible to free +/// the list. +int* mkAtomCellList(LinkCell* boxes, enum HaloFaceOrder iFace, const int nCells) +{ + int* list = comdMalloc(nCells*sizeof(int)); + int xBegin = -1; + int xEnd = boxes->gridSize[0]+1; + int yBegin = -1; + int yEnd = boxes->gridSize[1]+1; + int zBegin = -1; + int zEnd = boxes->gridSize[2]+1; + + if (iFace == HALO_X_MINUS) xEnd = xBegin+2; + if (iFace == HALO_X_PLUS) xBegin = xEnd-2; + if (iFace == HALO_Y_MINUS) yEnd = yBegin+2; + if (iFace == HALO_Y_PLUS) yBegin = yEnd-2; + if (iFace == HALO_Z_MINUS) zEnd = zBegin+2; + if (iFace == HALO_Z_PLUS) zBegin = zEnd-2; + + int count = 0; + for (int ix=xBegin; ixpbcFactor[face]; + real3 shift; + shift[0] = pbcFactor[0] * s->domain->globalExtent[0]; + shift[1] = pbcFactor[1] * s->domain->globalExtent[1]; + shift[2] = pbcFactor[2] * s->domain->globalExtent[2]; + + int nCells = parms->nCells[face]; + int* cellList = parms->cellList[face]; + int nBuf = 0; + for (int iCell=0; iCellboxes->nAtoms[iBox]; ++ii) + { + buf[nBuf].gid = s->atoms->gid[ii]; + buf[nBuf].type = s->atoms->iSpecies[ii]; + buf[nBuf].rx = s->atoms->r[ii][0] + shift[0]; + buf[nBuf].ry = s->atoms->r[ii][1] + shift[1]; + buf[nBuf].rz = s->atoms->r[ii][2] + shift[2]; + buf[nBuf].px = s->atoms->p[ii][0]; + buf[nBuf].py = s->atoms->p[ii][1]; + buf[nBuf].pz = s->atoms->p[ii][2]; + ++nBuf; + } + } + return nBuf*sizeof(AtomMsg); +} + +/// The unloadBuffer function for a halo exchange of atom data. +/// Iterates the receive buffer and places each atom that was received +/// into the link cell that corresponds to the atom coordinate. Note +/// that this naturally accomplishes transfer of ownership of atoms that +/// have moved from one spatial domain to another. Atoms with +/// coordinates in local link cells automatically become local +/// particles. Atoms that are owned by other ranks are automatically +/// placed in halo kink cells. +/// \see HaloExchangeSt::unloadBuffer for an explanation of the +/// unloadBuffer parameters. +void unloadAtomsBuffer(void* vparms, void* data, int face, int bufSize, char* charBuf) +{ + AtomExchangeParms* parms = (AtomExchangeParms*) vparms; + SimFlat* s = (SimFlat*) data; + AtomMsg* buf = (AtomMsg*) charBuf; + int nBuf = bufSize / sizeof(AtomMsg); + assert(bufSize % sizeof(AtomMsg) == 0); + + for (int ii=0; iiboxes, s->atoms, gid, type, rx, ry, rz, px, py, pz); + } +} + +void destroyAtomsExchange(void* vparms) +{ + AtomExchangeParms* parms = (AtomExchangeParms*) vparms; + + for (int ii=0; ii<6; ++ii) + { + free(parms->pbcFactor[ii]); + free(parms->cellList[ii]); + } +} + +/// Make a list of link cells that need to send data across the +/// specified face. Note that this list must be compatible with the +/// corresponding recv list to ensure that the data goes to the correct +/// atoms. +/// +/// \see initLinkCells for information about the conventions for grid +/// coordinates of link cells. +int* mkForceSendCellList(LinkCell* boxes, int face, int nCells) +{ + int* list = comdMalloc(nCells*sizeof(int)); + int xBegin, xEnd, yBegin, yEnd, zBegin, zEnd; + + int nx = boxes->gridSize[0]; + int ny = boxes->gridSize[1]; + int nz = boxes->gridSize[2]; + switch(face) + { + case HALO_X_MINUS: + xBegin=0; xEnd=1; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz; + break; + case HALO_X_PLUS: + xBegin=nx-1; xEnd=nx; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz; + break; + case HALO_Y_MINUS: + xBegin=-1; xEnd=nx+1; yBegin=0; yEnd=1; zBegin=0; zEnd=nz; + break; + case HALO_Y_PLUS: + xBegin=-1; xEnd=nx+1; yBegin=ny-1; yEnd=ny; zBegin=0; zEnd=nz; + break; + case HALO_Z_MINUS: + xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=0; zEnd=1; + break; + case HALO_Z_PLUS: + xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=nz-1; zEnd=nz; + break; + default: + assert(1==0); + } + + int count = 0; + for (int ix=xBegin; ixgridSize[0]; + int ny = boxes->gridSize[1]; + int nz = boxes->gridSize[2]; + switch(face) + { + case HALO_X_MINUS: + xBegin=-1; xEnd=0; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz; + break; + case HALO_X_PLUS: + xBegin=nx; xEnd=nx+1; yBegin=0; yEnd=ny; zBegin=0; zEnd=nz; + break; + case HALO_Y_MINUS: + xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=0; zBegin=0; zEnd=nz; + break; + case HALO_Y_PLUS: + xBegin=-1; xEnd=nx+1; yBegin=ny; yEnd=ny+1; zBegin=0; zEnd=nz; + break; + case HALO_Z_MINUS: + xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=-1; zEnd=0; + break; + case HALO_Z_PLUS: + xBegin=-1; xEnd=nx+1; yBegin=-1; yEnd=ny+1; zBegin=nz; zEnd=nz+1; + break; + default: + assert(1==0); + } + + int count = 0; + for (int ix=xBegin; ixnCells[face]; + int* cellList = parms->sendCells[face]; + int nBuf = 0; + for (int iCell=0; iCellboxes->nAtoms[iBox]; ++ii) + { + buf[nBuf].dfEmbed = data->dfEmbed[ii]; + ++nBuf; + } + } + return nBuf*sizeof(ForceMsg); +} + +/// The unloadBuffer function for a force exchange. +/// Data is received in an order that naturally aligns with the atom +/// storage so it is simple to put the data where it belongs. +/// +/// \see HaloExchangeSt::unloadBuffer for an explanation of the +/// unloadBuffer parameters. +void unloadForceBuffer(void* vparms, void* vdata, int face, int bufSize, char* charBuf) +{ + ForceExchangeParms* parms = (ForceExchangeParms*) vparms; + ForceExchangeData* data = (ForceExchangeData*) vdata; + ForceMsg* buf = (ForceMsg*) charBuf; + assert(bufSize % sizeof(ForceMsg) == 0); + + int nCells = parms->nCells[face]; + int* cellList = parms->recvCells[face]; + int iBuf = 0; + for (int iCell=0; iCellboxes->nAtoms[iBox]; ++ii) + { + data->dfEmbed[ii] = buf[iBuf].dfEmbed; + ++iBuf; + } + } + assert(iBuf == bufSize/ sizeof(ForceMsg)); +} + +void destroyForceExchange(void* vparms) +{ + ForceExchangeParms* parms = (ForceExchangeParms*) vparms; + + for (int ii=0; ii<6; ++ii) + { + free(parms->sendCells[ii]); + free(parms->recvCells[ii]); + } +} + +/// \details +/// The force exchange assumes that the atoms are in the same order in +/// both a given local link cell and the corresponding remote cell(s). +/// However, the atom exchange does not guarantee this property, +/// especially when atoms cross a domain decomposition boundary and move +/// from one task to another. Trying to maintain the atom order during +/// the atom exchange would immensely complicate that code. Instead, we +/// just sort the atoms after the atom exchange. +void sortAtomsInCell(Atoms* atoms, LinkCell* boxes, int iBox) +{ + int nAtoms = boxes->nAtoms[iBox]; + + AtomMsg tmp[nAtoms]; + + int begin = iBox*MAXATOMS; + int end = begin + nAtoms; + for (int ii=begin, iTmp=0; iigid[ii]; + tmp[iTmp].type = atoms->iSpecies[ii]; + tmp[iTmp].rx = atoms->r[ii][0]; + tmp[iTmp].ry = atoms->r[ii][1]; + tmp[iTmp].rz = atoms->r[ii][2]; + tmp[iTmp].px = atoms->p[ii][0]; + tmp[iTmp].py = atoms->p[ii][1]; + tmp[iTmp].pz = atoms->p[ii][2]; + } + qsort(&tmp, nAtoms, sizeof(AtomMsg), sortAtomsById); + for (int ii=begin, iTmp=0; iigid[ii] = tmp[iTmp].gid; + atoms->iSpecies[ii] = tmp[iTmp].type; + atoms->r[ii][0] = tmp[iTmp].rx; + atoms->r[ii][1] = tmp[iTmp].ry; + atoms->r[ii][2] = tmp[iTmp].rz; + atoms->p[ii][0] = tmp[iTmp].px; + atoms->p[ii][1] = tmp[iTmp].py; + atoms->p[ii][2] = tmp[iTmp].pz; + } + +} + +/// A function suitable for passing to qsort to sort atoms by gid. +/// Because every atom in the simulation is supposed to have a unique +/// id, this function checks that the atoms have different gids. If +/// that assertion ever fails it is a sign that something has gone +/// wrong elsewhere in the code. +int sortAtomsById(const void* a, const void* b) +{ + int aId = ((AtomMsg*) a)->gid; + int bId = ((AtomMsg*) b)->gid; + assert(aId != bId); + + if (aId < bId) + return -1; + return 1; + /* + int diff = aId-bId; + return diff; + */ +} + diff --git a/comd-cl/src-cl/haloExchange.h b/comd-cl/src-cl/haloExchange.h new file mode 100644 index 0000000..d511a95 --- /dev/null +++ b/comd-cl/src-cl/haloExchange.h @@ -0,0 +1,86 @@ +/// \file +/// Communicate halo data such as "ghost" atoms with neighboring tasks. + +#ifndef __HALO_EXCHANGE_ +#define __HALO_EXCHANGE_ + +#include "mytype.h" +struct AtomsSt; +struct LinkCellSt; +struct DomainSt; + +/// A polymorphic structure to store information about a halo exchange. +/// This structure can be thought of as an abstract base class that +/// specifies the interface and implements the communication patterns of +/// a halo exchange. Concrete sub-classes supply actual implementations +/// of the loadBuffer, unloadBuffer, and destroy functions, that are +/// specific to the actual data being exchanged. If the subclass needs +/// additional data members, these can be stored in a structure that is +/// pointed to by parms. +/// +/// Designing the structure this way allows us to re-use the +/// communication code for both atom data and partial force data. +/// +/// \see eamForce +/// \see redistributeAtoms +typedef struct HaloExchangeSt +{ + /// The MPI ranks of the six face neighbors of the local domain. + /// Ranks are stored in the order specified in HaloFaceOrder. + int nbrRank[6]; + /// The maximum send/recv buffer size (in bytes) that will be needed + /// for this halo exchange. + int bufCapacity; + /// Pointer to a sub-class specific function to load the send buffer. + /// \param [in] parms The parms member of the structure. This is a + /// pointer to a sub-class specific structure that can + /// be used by the load and unload functions to store + /// sub-class specific data. + /// \param [in] data A pointer to a structure that the contains the data + /// that is needed by the loadBuffer function. The + /// loadBuffer function will cast the pointer to a + /// concrete type that is appropriate for the data + /// being exchanged. + /// \param [in] face Specifies the face across which data is being sent. + /// \param [in] buf The send buffer to be loaded + /// \return The number of bytes loaded into the send buffer. + int (*loadBuffer)(void* parms, void* data, int face, char* buf); + /// Pointer to a sub-class specific function to unload the recv buffer. + /// \param [in] parms The parms member of the structure. This is a + /// pointer to a sub-class specific structure that can + /// be used by the load and unload functions to store + /// sub-class specific data. + /// \param [out] data A pointer to a structure that the contains the data + /// that is needed by the unloadBuffer function. The + /// unloadBuffer function will cast the pointer to a + /// concrete type that is appropriate for the data + /// being exchanged. + /// \param [in] face Specifies the face across which data is being sent. + /// \param [in] bufSize The number of bytes in the recv buffer. + /// \param [in] buf The recv buffer to be unloaded. + void (*unloadBuffer)(void* parms, void* data, int face, int bufSize, char* buf); + /// Pointer to a function to deallocate any memory used by the + /// sub-class parms. Essentially this is a virtual destructor. + void (*destroy)(void* parms); + /// A pointer to a sub-class specific structure that contains + /// additional data members needed by the sub-class. + void* parms; +} +HaloExchange; + +/// Create a HaloExchange for atom data. +HaloExchange* initAtomHaloExchange(struct DomainSt* domain, struct LinkCellSt* boxes); + +/// Create a HaloExchange for force data. +HaloExchange* initForceHaloExchange(struct DomainSt* domain, struct LinkCellSt* boxes); + +/// HaloExchange destructor. +void destroyHaloExchange(HaloExchange** haloExchange); + +/// Execute a halo exchange. +void haloExchange(HaloExchange* haloExchange, void* data); + +/// Sort the atoms by gid in the specified link cell. +void sortAtomsInCell(struct AtomsSt* atoms, struct LinkCellSt* boxes, int iBox); + +#endif diff --git a/comd-cl/src-cl/helpers.c b/comd-cl/src-cl/helpers.c new file mode 100644 index 0000000..63a3b31 --- /dev/null +++ b/comd-cl/src-cl/helpers.c @@ -0,0 +1,1188 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + + +#include "helpers.h" + +#include +#include "computeOCL.h" +#include "atomsCL.h" +#include "performanceTimers.h" + +// this should match the value in the LJ and/or EAM kernels + +// Make sure PASS_1, PASS_2, PASS_3 flags are correctly set! +// Make sure PASS_2 matches that is eam_kernels.c + +#define PASS_1 1 +#define PASS_2 0 +#define PASS_3 1 + +/// This chunk of code exists only because older OpenCL implementations +/// on Apple didn't treat vector types correctly. If you see errors during build time +/// about subscripted values, then you have a newer version of OpenCL, and these 'if' +/// clauses are no longer needed. They appear a couple more times in this file. +/// You can now set manually toggle these chunks of code using the APPLE_OCL_10 flag +/// below. If you have OpenCL 1.1 or newer, set it to 0 +/// + +#define UNROLL 1 +#define NSPECIES 1 + +void dummyTest() +{ + cl_real4 dummy; + +#if (defined (__APPLE__) || defined(MACOSX)) && (APPLE_OCL_10) + dummy[0] = 1.0; + dummy[1] = 1.0; +#else + dummy.s[0] = 1.0; + dummy.s[1] = 1.0; +#endif +} + +void printArray(real_t* array, int n, char *name) +{ + printf("%s;\n", name); + for (int i=0;iatoms.U, hostSim->atoms->U, hostSim->atoms->localRealSize, 0); + getVec(devSim->atoms.p, hostSim->atoms->p, hostSim->atoms->localRealSize, 0); + + double ePot = 0.0; + double eKin = 0.0; + for (int iBox=0;iBoxboxes->nLocalBoxes;iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + int iOff = iBox*MAXATOMS + iAtom; + int iSpecies = hostSim->atoms->iSpecies[iOff]; + double invMass = 1.0/hostSim->species[iSpecies].mass; + ePot += hostSim->atoms->U[iOff]; + eKin += (hostSim->atoms->p.x[iOff]*hostSim->atoms->p.x[iOff] + + hostSim->atoms->p.y[iOff]*hostSim->atoms->p.y[iOff] + + hostSim->atoms->p.z[iOff]*hostSim->atoms->p.z[iOff])*invMass; + + } + } + hostSim->ePotential = (cl_real)ePot; + hostSim->eKinetic = (cl_real)eKin*0.5; +} + +void sumLocalPrintEnergySoa(DevSimSoa* devSim, HostSimSoa* hostSim) +{ + /// Copy the array of particle energies from device to host. + /// The total potential energy is summed and returned in the hostSim.ePotential variable + + oclCopyToHost(devSim->atoms.U, hostSim->atoms->U, hostSim->atoms->localRealSize, 0); + getVec(devSim->atoms.p, hostSim->atoms->p, hostSim->atoms->localRealSize, 0); + + double ePot = 0.0; + double eKin = 0.0; + for (int iBox=0;iBoxboxes->nLocalBoxes;iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + int iOff = iBox*MAXATOMS + iAtom; + int iSpecies = hostSim->atoms->iSpecies[iOff]; + double invMass = 1.0/hostSim->species[iSpecies].mass; + ePot += hostSim->atoms->U[iOff]; + eKin += (hostSim->atoms->p.x[iOff]*hostSim->atoms->p.x[iOff] + + hostSim->atoms->p.y[iOff]*hostSim->atoms->p.y[iOff] + + hostSim->atoms->p.z[iOff]*hostSim->atoms->p.z[iOff])*invMass; + + } + } + hostSim->ePotential = (cl_real)ePot; + hostSim->eKinetic = (cl_real)eKin*0.5; + + ePot = ePot/hostSim->atoms->nLocal; + eKin = eKin*0.5/hostSim->atoms->nLocal; + real_t eTotal = ePot + eKin; + real_t Temp = eKin / (kB_eV * 1.5); + + printf(" %18.12f %18.12f %18.12f %12.4f", eTotal, ePot, eKin, Temp); +} + +void computePrintEnergyAos(DevSimAos devSim, HostSimAos* hostSim) +{ + /// Copy the array of particle energies from device to host. + /// The total potential energy is summed and returned in the hostSim.ePotential variable + + double eLocal; + + oclCopyToHost(devSim.atoms.U, hostSim->atoms->U, hostSim->atoms->localRealSize, 0); + + eLocal = 0.0; + for (int iBox=0;iBoxboxes->nLocalBoxes;iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + eLocal += hostSim->atoms->U[iBox*MAXATOMS + iAtom]; + } + } + hostSim->ePotential = (cl_real)eLocal; + + //printf("System potential energy = %30.20f\n", hostSim->ePotential); + printf(" %30.20e", hostSim->ePotential); + +} + +void printStateSoa(HostSimSoa hostSim, int nToPrint) +{ + /// Print the box index, atom index, position, momentum and force for the + /// first nCells boxes of the simulation + + int i, iBox; + int atomCount = 0; + iBox = 0; + printf("System state:\n"); + while (atomCount < nToPrint) + { + for (int iAtom=0;iAtomnAtoms[iBox];iAtom++) + { + + i = iBox*MAXATOMS + iAtom; + + printf("%02d, %02d, " + "X=(%+020.12e %+020.12e %+020.12e) 1 " + "P=(%+020.12e %+020.12e %+020.12e) " + "F=(%+020.12e %+020.12e %+020.12e)\n", + iBox, iAtom, + hostSim.atoms->r.x[i],hostSim.atoms->r.y[i],hostSim.atoms->r.z[i], + hostSim.atoms->p.x[i],hostSim.atoms->p.y[i],hostSim.atoms->p.z[i], + hostSim.atoms->f.x[i],hostSim.atoms->f.y[i],hostSim.atoms->f.z[i]); + atomCount ++; + + } + iBox ++; + } + +} + +void printStateAos(HostSimAos hostSim, int nToPrint) +{ + /// Print the box index, atom index, position, momentum and force for the + /// first nCells boxes of the simulation + + int i, iBox; + int atomCount = 0; + iBox = 0; + printf("System state:\n"); + while (atomCount < nToPrint) + { + for (int iAtom=0;iAtomnAtoms[iBox];iAtom++) + { + + i = iBox*MAXATOMS + iAtom; +#if (defined (__APPLE__) || defined(MACOSX)) && (APPLE_OCL_10) + printf("%02d, %02d, " + "X=(%+020.12e %+020.12e %+020.12e) 1 " + "P=(%+020.12e %+020.12e %+020.12e) " + "F=(%+020.12e %+020.12e %+020.12e)\n", + iBox, iAtom, + hostSim.atoms->r[i][0],hostSim.atoms->r[i][1],hostSim.atoms->r[i][2], + hostSim.atoms->p[i][0],hostSim.atoms->p[i][1],hostSim.atoms->p[i][2], + hostSim.atoms->f[i][0],hostSim.atoms->f[i][1],hostSim.atoms->f[i][2]); +#else + printf("%02d, %02d, " + "X=(%+020.12e %+020.12e %+020.12e) 1 " + "P=(%+020.12e %+020.12e %+020.12e) " + "F=(%+020.12e %+020.12e %+020.12e)\n", + iBox, iAtom, + hostSim.atoms->r[i].s[0],hostSim.atoms->r[i].s[1],hostSim.atoms->r[i].s[2], + hostSim.atoms->p[i].s[0],hostSim.atoms->p[i].s[1],hostSim.atoms->p[i].s[2], + hostSim.atoms->f[i].s[0],hostSim.atoms->f[i].s[1],hostSim.atoms->f[i].s[2]); +#endif + atomCount ++; + } + iBox ++; + } + +} + +void putEamCh(HostEamCh eamChH, DevEamCh eamChD) +{ + oclCopyToDevice(eamChH.rho, eamChD.rho, eamChH.rhoChebSize, 0); + oclCopyToDevice(eamChH.phi, eamChD.phi, eamChH.phiChebSize, 0); + oclCopyToDevice(eamChH.F, eamChD.F, eamChH.fChebSize, 0); + + oclCopyToDevice(eamChH.nValues, eamChD.nValues, sizeof(cl_int)*3, 0); +} + +void oclRunKernel(cl_kernel kernel, cl_event *event, size_t* nGlobal, size_t* nLocal) +{ + int err = clEnqueueNDRangeKernel(commandq, kernel, 2, NULL, nGlobal, nLocal, 0, NULL, event); + if (err != CL_SUCCESS) + { + printf("Error: Failed to enqueue kernel! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + clWaitForEvents(1, event); +} + +void printSim(SimFlat *s,FILE *fp) +{ + /// Print the base simulation data + /// Note this is in a slightly different order than the OpenCL code returns + + for (int i=0; iboxes->nLocalBoxes; i++) + { + int j; + int *id; + + for (int iOff=i*MAXATOMS,j=0; jboxes->nAtoms[i]; j++,iOff++) + { + if ( s->atoms->gid[iOff] < 10) + { + fprintf(fp, + "%02d %02d " + "X=(%+020.12e %+020.12e %+020.12e) 1 " + "P=(%+020.12e %+020.12e %+020.12e) " + "F=(%+020.12e %+020.12e %+020.12e)\n", + i, + s->atoms->gid[iOff]+1, + s->atoms->r[iOff][0],s->atoms->r[iOff][1],s->atoms->r[iOff][2], + s->atoms->p[iOff][0],s->atoms->p[iOff][1],s->atoms->p[iOff][2], + s->atoms->f[iOff][0],s->atoms->f[iOff][1],s->atoms->f[iOff][2] + ); + } + } + } + return; +} + +void clGetElapsedTime(cl_event event, cl_real* elapsed_time, cl_real* enqueuedTime) +{ + /// Helper routine to return the start-to-finish time (elapsed_time) + /// and the time from enqueueing to finish (enqueuedTime) + + cl_ulong t_start, t_end, t_enqueue; + int err; + size_t param_size; + + + err = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &t_end, ¶m_size); + if (err != CL_SUCCESS) + { + printf("Error: %s\n", print_cl_errstring(err)); + printf("t_end = %llu\n", t_end); + //exit(1); + } + + err = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &t_start, ¶m_size); + if (err != CL_SUCCESS) + { + printf("Error: %s\n", print_cl_errstring(err)); + printf("t_start = %llu\n", t_start); + //exit(1); + } + + err = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_QUEUED, sizeof(cl_ulong), &t_enqueue, ¶m_size); + + *elapsed_time = (t_end - t_start)*1.0e-9 ; + *enqueuedTime = (t_end - t_enqueue)*1.0e-9 ; +} + +void getPrintStateSoa(DevSimSoa* devSim, HostSimSoa* hostSim) +{ + getVec(devSim->atoms.r, hostSim->atoms->r, hostSim->atoms->localRealSize, 0); + getVec(devSim->atoms.p, hostSim->atoms->p, hostSim->atoms->localRealSize, 0); + getVec(devSim->atoms.f, hostSim->atoms->f, hostSim->atoms->localRealSize, 0); + printStateSoa(*hostSim, 2); +} + +void getPrintStateAos(DevSimAos devSim, HostSimAos hostSim) +{ + getVecAos(devSim.atoms.r, hostSim.atoms->r, hostSim.atoms->localRealSize, 0); + getVecAos(devSim.atoms.p, hostSim.atoms->p, hostSim.atoms->localRealSize, 0); + getVecAos(devSim.atoms.f, hostSim.atoms->f, hostSim.atoms->localRealSize, 0); + printStateAos(hostSim, 2); +} + +#if USE_CHEBY +void initHostEamCh(HostEamCh *eamChH, SimFlat *sim) +{ + /// Allocate and initialize all the EAM potential data needed + + int i; + int n_v_rho; + int n_v_phi; + int n_v_F; + + // assign eam potential values + printf("Using eam potential\n"); + EamPotential *new_pot; + new_pot = (EamPotential*) sim->pot; + EamCheby *chPot = sim->chPot; + eamChH->cutoff = new_pot->cutoff; + printf("Cutoff = %e\n", eamChH->cutoff); + + /// The Chebyshev arrays are stored as: + /// The interpolants for the potential + /// The interpolants for the derivative + /// The 3 values r0, rN and a dummy float to match the table + + n_v_rho = chPot->rho->n; + eamChH->rhoChebSize = (3 + 2*chPot->rho->n)*sizeof(cl_real); + printf("rho potential size = %d\n", eamChH->rhoChebSize); + + n_v_phi = chPot->phi->n; + eamChH->phiChebSize = (3 + 2*chPot->phi->n)*sizeof(cl_real); + printf("phi potential size = %d\n", eamChH->phiChebSize); + + n_v_F = chPot->f->n; + eamChH->fChebSize = (3 + 2*chPot->f->n)*sizeof(cl_real); + printf("F potential size = %d\n", eamChH->fChebSize); + + eamChH->rho = malloc(eamChH->rhoChebSize); + eamChH->phi = malloc(eamChH->phiChebSize); + eamChH->F = malloc(eamChH->fChebSize); + eamChH->nValues = malloc(3*sizeof(cl_int)); + + eamChH->rho[2*n_v_rho+0] = chPot->rho->x0; + eamChH->rho[2*n_v_rho+2] = chPot->rho->invDx; + + for (i=0;irho[i] = chPot->rho->values[i]; + eamChH->rho[n_v_rho+i] = chPot->drho->values[i]; + } + + eamChH->phi[2*n_v_phi+0] = chPot->phi->x0; + eamChH->phi[2*n_v_phi+2] = chPot->phi->invDx; + + for (i=0;iphi[i] = chPot->phi->values[i]; + eamChH->phi[n_v_phi+i] = chPot->dphi->values[i]; + } + + eamChH->F[2*n_v_F+0] = chPot->f->x0; + eamChH->F[2*n_v_F+2] = chPot->f->invDx; + + for (i=0;iF[i] = chPot->f->values[i]; + eamChH->F[n_v_F+i] = chPot->df->values[i]; + } + + eamChH->nValues[0] = n_v_phi; + eamChH->nValues[1] = n_v_rho; + eamChH->nValues[2] = n_v_F; +} +#endif + +/// Allocate and initialize all the host-side simulation data needed, +/// including the appropriate potential data +HostSimSoa* initHostSimSoa(SimFlat *sim, int eamFlag) +{ + HostSimSoa* hostSim = malloc(sizeof(HostSimSoa)); + hostSim->dt = sim->dt; + printf("dt = %e\n", hostSim->dt); + + hostSim->eamFlag = eamFlag; + + hostSim->domain = initHostDomainSoa(sim); + hostSim->boxes = initHostBoxesSoa(sim); + hostSim->atoms = initHostAtomsSoa(sim); + + // only 1 species for now but coded for more + hostSim->species = malloc(sizeof(HostSpeciesData)*NSPECIES); + hostSim->invMass = malloc(sizeof(cl_real)*NSPECIES); + for (int iSpecies = 0; iSpecies < NSPECIES; iSpecies++) + { + strcpy(hostSim->species[iSpecies].name, sim->species->name); + hostSim->species[iSpecies].atomicNo = sim->species->atomicNo; + hostSim->species[iSpecies].mass = sim->species->mass; + + hostSim->invMass[iSpecies] = 1.0/hostSim->species[iSpecies].mass; + } + + if(hostSim->eamFlag) + { + initHostEam(&hostSim->eamPot, sim); +#if USE_CHEBY + initHostEamCh(&hostSim->eamCh, sim); +#endif + } + else + { + initHostLj(&hostSim->ljPot, sim); + } + + printf("Host SoA simulation initialized\n"); + return hostSim; +} + +/// Allocate and initialize all the host-side simulation data needed, +/// including the appropriate potential data +void initHostSimAos (HostSimAos *hostSim, SimFlat *sim) +{ + hostSim->dt = sim->dt; + printf("dt = %e\n", hostSim->dt); + + hostSim->domain = initHostDomainAos(sim); + hostSim->boxes = initHostBoxesAos(sim); + hostSim->atoms = initHostAtomsAos(sim); + + hostSim->nLocalAtoms = sim->atoms->nLocal; + + // only 1 species for now + hostSim->invMass = malloc(sizeof(cl_real)); + + hostSim->invMass[0] = 1.0/hostSim->species->mass; + + if(hostSim->eamFlag) + { + initHostEam(&hostSim->eamPot, sim); +#if USE_CHEBY + initHostEamCh(&hostSim->eamCh, sim); +#endif + } + else + { + initHostLj(&hostSim->ljPot, sim); + } + + printf("Host AoS simulation initialized\n"); +} + +DevSimSoa* initDevSimSoa(HostSimSoa *hostSim) +{ + /// Allocate all the device-side arrays needed for the simulation + DevSimSoa* devSim = malloc(sizeof(DevSimSoa)); + + // allocate memory buffer on device + printf("Allocating device memory..."); + fflush(stdout); + + createDevBoxesSoa(&devSim->boxes, hostSim->boxes); + createDevAtomsSoa(&devSim->atoms, hostSim->atoms); + + // particle mass + oclCreateReadWriteBuffer(&devSim->invMass, sizeof(cl_real)); + + if (hostSim->eamFlag) + { + initDevEam(&hostSim->eamPot, &devSim->eamPot); + +#if USE_CHEBY + //************************************************************************ + // EAM Chebychev coefficient data + oclCreateReadWriteBuffer(&devSim->eamCh.rho, hostSim->eamCh.rhoChebSize); + oclCreateReadWriteBuffer(&devSim->eamCh.phi, hostSim->eamCh.phiChebSize); + oclCreateReadWriteBuffer(&devSim->eamCh.F, hostSim->eamCh.fChebSize); + + oclCreateReadWriteBuffer(&devSim->eamCh.nValues, sizeof(cl_int)*3); + + // add this here to make passing arguments to kernels easier + devSim->eamCh.cutoff = hostSim->eamCh.cutoff; +#endif + } + else + { + devSim->ljPot.cutoff = hostSim->ljPot.cutoff; + devSim->ljPot.sigma = hostSim->ljPot.sigma; + devSim->ljPot.epsilon = hostSim->ljPot.epsilon; + } + + printf("device memory allocated\n"); + return devSim; +} + +void initDevSimAos(DevSimAos *devSim, HostSimAos *hostSim) +{ + /// Allocate all the device-side arrays needed for the simulation + + // allocate memory buffer on device + printf("Allocating device memory (AoS)..."); + + createDevAtomsAos(&devSim->atoms, hostSim->atoms); + + // particle mass + oclCreateReadWriteBuffer(&devSim->invMass, sizeof(cl_real)); + + + createDevBoxesAos(&devSim->boxes, hostSim->boxes); + + + if (hostSim->eamFlag) + { + initDevEam(&hostSim->eamPot, &devSim->eamPot); + +#if USE_CHEBY + //************************************************************************ + // EAM Chebychev coefficient data + oclCreateReadWriteBuffer(&devSim->eamCh.rho, hostSim->eamCh.rhoChebSize); + oclCreateReadWriteBuffer(&devSim->eamCh.phi, hostSim->eamCh.phiChebSize); + oclCreateReadWriteBuffer(&devSim->eamCh.F, hostSim->eamCh.fChebSize); + + oclCreateReadWriteBuffer(&devSim->eamCh.nValues, sizeof(cl_int)*3); + + // add this here to make passing arguments to kernels easier + devSim->eamCh.cutoff = hostSim->eamCh.cutoff; +#endif + } + else + { + devSim->ljPot.cutoff = hostSim->ljPot.cutoff; + devSim->ljPot.sigma = hostSim->ljPot.sigma; + devSim->ljPot.epsilon = hostSim->ljPot.epsilon; + } + printf("device memory allocated\n"); + +} + +void putSimSoa(HostSimSoa* hostSim, DevSimSoa* devSim) +{ + /// Copy all the host-side simulation data to the corresponding device arrays + + printf("Copying data to device..."); + + putBoxesSoa(hostSim->boxes, &devSim->boxes); + + // copy the input arrays to the device + // positions + putAtomsSoa(hostSim->atoms, &devSim->atoms); + + oclCopyToDevice(hostSim->invMass, devSim->invMass, sizeof(cl_real), 0); + // simulation data + + if(hostSim->eamFlag) + { + putEamPot(hostSim->eamPot, devSim->eamPot); + // putEamCh(hostSim.eamCh, devSim.eamCh); + } + printf("data copied\n"); + +} + +void putSimAos(HostSimAos hostSim, DevSimAos devSim) +{ + /// Copy all the host-side simulation data to the corresponding device arrays + + printf("Copying data to device (AoS)..."); + fflush(stdout); + + // copy the input arrays to the device + // positions + putAtomsAos(hostSim.atoms, &devSim.atoms); + + printf("positions..."); + fflush(stdout); + + // mass + oclCopyToDevice(hostSim.invMass, devSim.invMass, sizeof(cl_real), 0); + + printf("mass..."); + fflush(stdout); + + // simulation data + putBoxesAos(hostSim.boxes, &devSim.boxes); + + printf("boxes..."); + fflush(stdout); + + if(hostSim.eamFlag) + { + putEamPot(hostSim.eamPot, devSim.eamPot); + } + printf("data copied\n"); + fflush(stdout); + +} + +void FreeSimSoa(HostSimSoa* hostSim, DevSimSoa* devSim) +{ + /// clean up all the host and device memory objects + + freeAtomsSoa(hostSim->atoms, devSim->atoms); + + free(hostSim->invMass); + + clReleaseMemObject(devSim->invMass); + + if(hostSim->eamFlag) + { + } +} + +void FreeSimAos(HostSimAos hostSim, DevSimAos devSim) +{ + /// clean up all the host and device memory objects + + freeAtomsAos(hostSim.atoms, devSim.atoms); + + free(hostSim.invMass); + + clReleaseMemObject(devSim.invMass); + + if(hostSim.eamFlag) + { + } +} + +void buildModulesSoa(OclSimSoa* oclSim, + cl_kernel *Viz) +{ + /// Build the kernels to compute force, and advance position and velocity. + /// Return the appropriate global and local sizes + + HostSimSoa* hostSim = oclSim->hostSim; + + cl_kernel* forceKernels = oclSim->forceKernels; + cl_kernel* advancePosition = oclSim->advancePosition; + cl_kernel* advanceVelocity = oclSim->advanceVelocity; + cl_kernel* pfxKernel = oclSim->pfxKernel; + + cl_program timestepModule; + cl_program ljModule; + cl_program eamModule; + cl_program vizModule; + + cl_program boxModule; + + buildProgramFromFile(&boxModule, "./src-cl/pfx_boxes.cl", context, deviceId); + int err; + + // build the program from the kernel source file + + buildProgramFromFile(×tepModule, "./src-cl/timestep_kernels.cl", context, deviceId); + // only build the modules needed for the potential chosen + if(hostSim->eamFlag) + { + buildProgramFromFile(&eamModule, "./src-cl/eam_kernels.cl", context, deviceId); + } + else + { + buildProgramFromFile(&ljModule, "./src-cl/lj_kernels.cl", context, deviceId); + } + printf("Program built\n"); + + if(hostSim->eamFlag) + { + // create the EAM_Force_x kernels from the program + forceKernels[0] = clCreateKernel(eamModule, "EAM_Force_1", &err); + if (!forceKernels[0] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel EAM_Force_1!\n"); + exit(1); + } + else + { + printf("Kernel EAM_Force_1 built\n"); + } + forceKernels[1] = clCreateKernel(eamModule, "EAM_Force_2", &err); + if (!forceKernels[1] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel EAM_Force_2!\n"); + exit(1); + } + else + { + printf("Kernel EAM_Force_2 built\n"); + } + forceKernels[2] = clCreateKernel(eamModule, "EAM_Force_3", &err); + if (!forceKernels[2] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel EAM_Force_3!\n"); + exit(1); + } + else + { + printf("Kernel EAM_Force_3 built\n"); + } + + } + else + { + // create the ljForce kernel from the program + forceKernels[0] = clCreateKernel(ljModule, "ljForce", &err); + if (!forceKernels[0] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel ljForce!\n"); + exit(1); + } + else + { + printf("Kernel ljForce built\n"); + } + } + // create the advanceVelocity kernel from the program + *advanceVelocity = clCreateKernel(timestepModule, "advanceVelocitySoa", &err); + if (!*advanceVelocity || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel advanceVelocity!\n"); + exit(1); + } + else + { + printf("Kernel advanceVelocity built\n"); + } + // create the advancePosition kernel from the program + *advancePosition = clCreateKernel(timestepModule, "advancePositionSoa", &err); + if (!*advancePosition || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel advancePosition!\n"); + exit(1); + } + else + { + printf("Kernel advancePosition built\n"); + } + + *pfxKernel = clCreateKernel(boxModule, "pfxSumBoxes", &err); + + if(!*pfxKernel || err != CL_SUCCESS) + { + printf("Error: Failed to create kernel pfxSumBoxes \n"); + exit(1); + } + else + { + printf("Kernel prefix sum built\n"); + } + + // determine allowable local work sizes for the device we chose + if(hostSim->eamFlag) + { + size_t lTemp = 0; + err = clGetKernelWorkGroupInfo(forceKernels[0], deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(oclSim->lForce), oclSim->lForce, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve eamForce work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + lTemp = oclSim->lForce[0]; + err = clGetKernelWorkGroupInfo(forceKernels[2], deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(oclSim->lForce), oclSim->lForce, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve eamForce work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + // set local size to smallest for safety + if (lTemp < oclSim->lForce[0]) oclSim->lForce[0] = lTemp; + printf("Maximum local size for eamForce is (%lu, %lu)\n", oclSim->lForce[0], oclSim->lForce[1]); + } + else + { + err = clGetKernelWorkGroupInfo(forceKernels[0], deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(oclSim->lForce), oclSim->lForce, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve ljForce work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + printf("Maximum local size for ljForce is (%lu, %lu)\n", oclSim->lForce[0], oclSim->lForce[1]); + } + + err = clGetKernelWorkGroupInfo(*advanceVelocity, deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(oclSim->lVelocity), oclSim->lVelocity, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve advanceVelocity work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + printf("Maximum local size for advanceVelocity is (%lu, %lu)\n", oclSim->lVelocity[0], oclSim->lVelocity[1]); + + err = clGetKernelWorkGroupInfo(*advancePosition, deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(oclSim->lPosition), oclSim->lPosition, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve advancePosition work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + printf("Maximum local size for advancePosition is (%lu, %lu)\n", oclSim->lPosition[0], oclSim->lPosition[1]); + + oclSim->lForce[1] = 1; + oclSim->lVelocity[1] = 1; + oclSim->lPosition[1] = 1; + + // set the global size equal to the numer of atoms + oclSim->gForce[0] = hostSim->atoms->nGlobal;// MAXATOMS; + oclSim->gForce[1] = 1;//hostSim->boxes->nLocalBoxes; + + oclSim->gVelocity[0] = MAXATOMS; + oclSim->gVelocity[1] = hostSim->boxes->nLocalBoxes; + + oclSim->gPosition[0] = MAXATOMS; + oclSim->gPosition[1] = hostSim->boxes->nLocalBoxes; + + // fudge the loop unrollling here +// oclSim->gForce[0] = oclSim->gForce[0]*UNROLL; +// oclSim->gForce[1] = oclSim->gForce[1]/UNROLL; + +// oclSim->gVelocity[0] = oclSim->gVelocity[0]*UNROLL; +// oclSim->gVelocity[1] = oclSim->gVelocity[1]/UNROLL; + +// oclSim->gPosition[0] = oclSim->gPosition[0]*UNROLL; +// oclSim->gPosition[1] = oclSim->gPosition[1]/UNROLL; + + // if the local size is greater than the total size, set local size to global size + int i; + for (i=0;i<2;i++) + { + if (oclSim->gForce[i] < oclSim->lForce[i]) oclSim->lForce[i] = oclSim->gForce[i]; + if (oclSim->gVelocity[i] < oclSim->lVelocity[i]) oclSim->lVelocity[i] = oclSim->gVelocity[i]; + if (oclSim->gPosition[i] < oclSim->lPosition[i]) oclSim->lPosition[i] = oclSim->gPosition[i]; + } + + oclSim->lForce[0] = 256; + + printf("Global and local sizes are (%lu, %lu), (%lu, %lu)\n", + oclSim->gForce[0], oclSim->gForce[1], oclSim->lForce[0], oclSim->lForce[1]); + printf("Global and local sizes are (%lu, %lu), (%lu, %lu)\n", + oclSim->gVelocity[0], oclSim->gVelocity[1], oclSim->lVelocity[0], oclSim->lVelocity[1]); + printf("Global and local sizes are (%lu, %lu), (%lu, %lu)\n", + oclSim->gPosition[0], oclSim->gPosition[1], oclSim->lPosition[0], oclSim->lPosition[1]); +} +void buildModulesAos(cl_kernel *forceKernels, + cl_kernel *advancePosition, + cl_kernel *advanceVelocity, + cl_kernel *Viz, + HostSimAos hostSim, + size_t *nLocal, + size_t *nGlobal) +{ + /// Build the kernels to compute force, and advance position and velocity. + /// Return the appropriate global and local sizes + + cl_program timestepModule; + cl_program ljModule; + cl_program eamModule; + cl_program vizModule; + + int err; + + // build the program from the kernel source file + + buildProgramFromFile(×tepModule, "./src-cl/timestep_kernels.c", context, deviceId); + // only build the modules needed for the potential chosen + if(hostSim.eamFlag) + { + buildProgramFromFile(&eamModule, "./src-cl/eam_kernels.c", context, deviceId); + } + else + { + buildProgramFromFile(&ljModule, "./src-cl/lj_kernels_aos.c", context, deviceId); + } + + printf("Program built\n"); + + if(hostSim.eamFlag) + { + // create the EAM_Force_x kernels from the program + forceKernels[0] = clCreateKernel(eamModule, "EAM_Force_1_AoS", &err); + if (!forceKernels[0] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel EAM_Force_1!\n"); + exit(1); + } + else + { + printf("Kernel EAM_Force_1 built\n"); + } + forceKernels[1] = clCreateKernel(eamModule, "EAM_Force_2_AoS", &err); + if (!forceKernels[1] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel EAM_Force_2!\n"); + exit(1); + } + else + { + printf("Kernel EAM_Force_2 built\n"); + } + forceKernels[2] = clCreateKernel(eamModule, "EAM_Force_3_AoS", &err); + if (!forceKernels[2] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel EAM_Force_3!\n"); + exit(1); + } + else + { + printf("Kernel EAM_Force_3 built\n"); + } + + } + else + { + // create the ljForce kernel from the program + forceKernels[0] = clCreateKernel(ljModule, "ljForceAos", &err); + if (!forceKernels[0] || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel ljForceAos!\n"); + exit(1); + } + else + { + printf("Kernel ljForceAos built\n"); + } + } + // create the advanceVelocity kernel from the program + *advanceVelocity = clCreateKernel(timestepModule, "advanceVelocityAos", &err); + if (!*advanceVelocity || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel advanceVelocityAos!\n"); + exit(1); + } + else + { + printf("Kernel advanceVelocity built\n"); + } + // create the advancePosition kernel from the program + *advancePosition = clCreateKernel(timestepModule, "advancePositionAos", &err); + if (!*advancePosition || err != CL_SUCCESS) + { + printf("Error: Failed to create compute kernel advancePositionAos!\n"); + exit(1); + } + else + { + printf("Kernel advancePosition built\n"); + } + + // determine allowable local work sizes for the device we chose + if(hostSim.eamFlag) + { + } + else + { + err = clGetKernelWorkGroupInfo(forceKernels[0], deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(nLocal), nLocal, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve ljForce work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + printf("Maximum local size for ljForce is (%lu, %lu)\n", nLocal[0], nLocal[1]); + } + + err = clGetKernelWorkGroupInfo(*advanceVelocity, deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(nLocal), nLocal, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve advanceVelocity work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + printf("Maximum local size for advanceVelocity is (%lu, %lu)\n", nLocal[0], nLocal[1]); + + err = clGetKernelWorkGroupInfo(*advancePosition, deviceId, CL_KERNEL_WORK_GROUP_SIZE, sizeof(nLocal), nLocal, NULL); + if (err != CL_SUCCESS) + { + printf("Error: Failed to retrieve advancePosition work group info! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + printf("Maximum local size for advancePosition is (%lu, %lu)\n", nLocal[0], nLocal[1]); + + //nLocal[1] += 1; + + // set the global size equal to the numer of atoms + nGlobal[0] = MAXATOMS; + nGlobal[1] = hostSim.boxes->nTotalBoxes; + + // if the local size is greater than the total size, set local size to global size + int i; + for (i=0;i<2;i++) + { + if (nGlobal[i] < nLocal[i]) + { + nLocal[i] = nGlobal[i]; + } + } + printf("Global and local sizes are (%lu, %lu), (%lu, %lu)\n", nGlobal[0], nGlobal[1], nLocal[0], nLocal[1]); + +} + +void haloForceExchangeSoa(HostSimSoa* hostSim, DevSimSoa* devSim, SimFlat* sim) +{ + // here we need to do all the force copying stuff + startTimer(eamHaloTimer); + EamPotential* pot = (EamPotential*)sim->pot; + oclCopyToHost(devSim->eamPot.dfEmbed, hostSim->eamPot.dfEmbed, hostSim->atoms->totalRealSize, 0); + for (int iBox=0; iBoxboxes->nTotalBoxes; iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + int iOff = iBox*MAXATOMS + iAtom; + pot->dfEmbed[iOff] = hostSim->eamPot.dfEmbed[iOff]; + } + } + haloExchange(pot->forceExchange, pot->forceExchangeData); + + for (int iBox=0; iBoxboxes->nTotalBoxes; iBox++) + { + for (int iAtom=0;iAtomboxes->nAtoms[iBox];iAtom++) + { + int iOff = iBox*MAXATOMS + iAtom; + hostSim->eamPot.dfEmbed[iOff] = pot->dfEmbed[iOff]; + } + } + oclCopyToDevice(hostSim->eamPot.dfEmbed, devSim->eamPot.dfEmbed, hostSim->atoms->totalRealSize, 0); + + stopTimer(eamHaloTimer); +} + +void computeForceOcl( + size_t* nGlobal, + size_t* nLocal, + cl_real* tKern, + OclSimSoa* oclSim, + SimFlat* sim) +{ + /// Execute the appropriate force kernels + + int nTot = oclSim->hostSim->atoms->nLocal; + int err; + cl_real tSimple, tOverall; + cl_real tTotal = 0.0; + if (oclSim->eamFlag) + { +#if (PASS_1) + if (DIAG_LEVEL > 1) + { + printf("Running EAM kernel 1.."); + fflush(stdout); + } + oclRunKernel(oclSim->forceKernels[0], &oclSim->forceEvent, nGlobal, nLocal); + err = clWaitForEvents(1, &oclSim->forceEvent); + if (DIAG_LEVEL > 1) + { + printf("done\n"); + fflush(stdout); + } + clGetElapsedTime(oclSim->forceEvent, &tSimple, &tOverall); + tTotal += tSimple; +#endif +#if (PASS_2) + if (DIAG_LEVEL > 1) + { + printf("Running EAM kernel 2.."); + fflush(stdout); + } + oclRunKernel(oclSim->forceKernels[1], &oclSim->forceEvent, nGlobal, nLocal); + err = clWaitForEvents(1, &oclSim->forceEvent); + if (DIAG_LEVEL > 1) + { + printf("done\n"); + fflush(stdout); + } + clGetElapsedTime(oclSim->forceEvent, &tSimple, &tOverall); + tTotal += tSimple; +#endif + haloForceExchangeSoa(oclSim->hostSim, oclSim->devSim, sim); + +#if (PASS_3) + if (DIAG_LEVEL > 1) + { + printf("Running EAM kernel 3.."); + fflush(stdout); + } + oclRunKernel(oclSim->forceKernels[2], &oclSim->forceEvent, nGlobal, nLocal); + err = clWaitForEvents(1, &oclSim->forceEvent); + if (DIAG_LEVEL > 1) + { + printf("done\n"); + fflush(stdout); + } + clGetElapsedTime(oclSim->forceEvent, &tSimple, &tOverall); + tTotal += tSimple; +#endif + *tKern = tTotal; + + printf("eam force time: %f\n", tTotal); + + if (DIAG_LEVEL > 0) + printf("Kernel EAM_Force executed in %.3e secs. (%e us/atom for %d atoms)\n", + tTotal, 1.0e6*tTotal/nTot, nTot); + + } + else + { + if (DIAG_LEVEL > 1) + { + printf("Running LJ kernel.."); + } + oclRunKernel(oclSim->forceKernels[0], &oclSim->forceEvent, nGlobal, nLocal); + err = clWaitForEvents(1, &oclSim->forceEvent); + if (DIAG_LEVEL > 1) + { + printf("done\n"); + } + clGetElapsedTime(oclSim->forceEvent, &tSimple, &tOverall); + if (DIAG_LEVEL > 0) + printf("Kernel ljForce executed in %.3e secs. (%e us/atom for %d atoms)\n", + tSimple, 1.0e6*tSimple/nTot, nTot); + *tKern = tSimple; +// printf("force kernel time: %f\n", tSimple); + } + +} + +void computeReductionBoxes(int *box_cnt, int nboxes, cl_mem boxes_d, cl_kernel pfxKernel) +{ + cl_int cerr = 0; + + // would not be required if redistribute atoms moves to GPU + oclCopyToDevice(box_cnt, boxes_d, nboxes*sizeof(int), 0); + + // right now just using one workgroup + size_t gt = 256, lt = 256; + + cl_event ev; + + cerr |= clEnqueueNDRangeKernel(commandq, pfxKernel, 1, NULL, >, <, 0, NULL, &ev); + if(cerr != CL_SUCCESS) + { + printf("error enqueuing boxes\n"); + exit(1); + } + clFlush(commandq); +// int64_t t1, t2; +// clGetEventProfilingInfo(ev, CL_PROFILING_COMMAND_START, 8, &t1, NULL); +// clGetEventProfilingInfo(ev, CL_PROFILING_COMMAND_END, 8, &t2, NULL); +// +// printf("red time: %f\n", (float)(t2-t1)*1e-9); +} diff --git a/comd-cl/src-cl/helpers.h b/comd-cl/src-cl/helpers.h new file mode 100644 index 0000000..87ad441 --- /dev/null +++ b/comd-cl/src-cl/helpers.h @@ -0,0 +1,248 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef HELPER_H +#define HELPER_H + +#include "clTypes.h" +#include "cl_utils.h" +#include "CoMDTypes.h" +#include "decomposition.h" +#include "eam.h" +#include "eamCL.h" +#include "constants.h" +//#include "ljCl.h" +#include "ljCL.h" +#include "atomsCL.h" +#include "linkCellsCL.h" +#include "timestepCL.h" +#include "decompositionCL.h" +#include "pfx_boxes.h" + +#define NUMNEIGHBORS 27 + +#define DIAG_LEVEL 0 +#define APPLE_OCL_10 0 + +typedef struct HostSpeciesDataSt +{ + char name[3]; //!< element name + int atomicNo; //!< atomic number + real_t mass; //!< mass in internal units +} HostSpeciesData; + +typedef struct HostDeformationSt +{ + cl_real* stress; + cl_real* strain; + cl_real* invStrain; + cl_real defGrad; +} HostDeformation; + +/// Structure-of-arrays structs +/// the OpenCl sim struct holds both the host and device +/// simulation structs, as well as the associated kernels. + +typedef struct HostSimSoaSt +{ + // boxes data + HostDomain* domain; + HostBoxes* boxes; + HostAtomsSoa* atoms; + HostSpeciesData* species; + cl_real* invMass; // per species + // real scalars + cl_real dt; + cl_real ePotential; + cl_real eKinetic; + // integer values + //int nLocalAtoms; + // eam flag + int eamFlag; + HostEamPot eamPot; + HostEamCh eamCh; + HostLjPot ljPot; + +} HostSimSoa; + +typedef struct DevSimSoaSt +{ + // boxes array values + cl_mem invMass; + // boxes data + DevAtomsSoa atoms; + DevBoxesSoa boxes; + DevDomain domain; + // note all scalars can be passed directly to the kernels + // real scalars + cl_real dt; + cl_real ePotential; + cl_real eKinetic; + // integer values + DevEamPot eamPot; + DevEamCh eamCh; + DevLjPot ljPot; +} DevSimSoa; + +typedef struct OclSimSoaSt +{ + HostSimSoa* hostSim; + DevSimSoa* devSim; + + cl_int eamFlag; + cl_int gpuFlag; + + // kernels + cl_kernel* forceKernels; + cl_kernel* advanceVelocity; + cl_kernel* advancePosition; + cl_kernel* pfxKernel; + + // events + cl_event forceEvent; + cl_event avEvent; + cl_event apEvent; + + // work group sizes for each kernel + size_t gForce[2]; + size_t lForce[2]; + size_t gVelocity[2]; + size_t lVelocity[2]; + size_t gPosition[2]; + size_t lPosition[2]; + +} OclSimSoa; + +typedef struct HostSimAosSt +{ + // boxes array values + cl_real* invMass; // per species + + // boxes data + HostAtomsAos* atoms; + HostBoxes* boxes; + HostDomain* domain; + HostSpeciesData* species; + // real scalars + cl_real dt; + cl_real ePotential; + cl_real eKinetic; + // integer values + int nLocalAtoms; + // eam flag + int eamFlag; + HostEamPot eamPot; + HostEamCh eamCh; + HostLjPot ljPot; +} HostSimAos; + +typedef struct DevSimAosSt +{ + // boxes array values + cl_mem invMass; + // boxes data + DevAtomsAos atoms; + DevBoxesAos boxes; + DevDomain domain; + // note all scalars can be passed directly to the kernels + // real scalars + cl_real dt; + cl_real ePotential; + cl_real eKinetic; + // integer values + DevEamPot eamPot; + DevEamCh eamCh; + DevLjPot ljPot; +} DevSimAos; + + +/* General helper utils */ + +void printArray(real_t* array, int n, char *name); + +void printSim(SimFlat *s,FILE *fp); + +void oclRunKernel(cl_kernel kernel, cl_event *event, size_t* nGlobal, size_t* nLocal); + +void clGetElapsedTime(cl_event event, cl_real* elapsed_time, cl_real* enqueuedTime); + +void computeForceOcl(size_t* nGlobal, size_t* nLocal, cl_real* t_kern, OclSimSoa* oclSim, SimFlat* sim); + +void computeReductionBoxes(int *, int, cl_mem, cl_kernel); + +/* SoA (default) variants) */ + +void getPrintStateSoa(DevSimSoa* simDevSoa, HostSimSoa* simHostSoa); + +void sumLocalEnergySoa(DevSimSoa* simDevSoa, HostSimSoa* simHostSoa); + +void sumLocalPrintEnergySoa(DevSimSoa* simDevSoa, HostSimSoa* simHostSoa); + +void printStateSoa(HostSimSoa simHostSoa, int nCells); + +void buildModulesSoa(OclSimSoa* oclSim, cl_kernel *Viz); + +HostSimSoa* initHostSimSoa(SimFlat *sim, int eamFlag); + +DevSimSoa* initDevSimSoa(HostSimSoa *simHostSoa); + +void putSimSoa(HostSimSoa* simHostSoa, DevSimSoa* simDevSoa); + +void FreeSimSoa(HostSimSoa* simHostSoa, DevSimSoa* simDevSoa); + +/* AoS variants */ + +void getPrintStateAos(DevSimAos simDevSoa, HostSimAos simHostSoa); + +void computePrintEnergyAos(DevSimAos simDevSoa, HostSimAos* simHostSoa); + +void printStateAos(HostSimAos simHostSoa, int nCells); + +void buildModulesAos(cl_kernel *forceKernels, cl_kernel *advancePosition, cl_kernel *AdvanceVelocity, cl_kernel *Viz, + HostSimAos simHostSoa, size_t *nLocal, size_t *nGlobal); + +void initHostSimAos (HostSimAos *simHostSoa, SimFlat *sim); + +void initDevSimAos(DevSimAos *simDevSoa, HostSimAos *simHostSoa); + +void putSimAos(HostSimAos simHostSoa, DevSimAos simDevSoa); + +void FreeSimAos(HostSimAos simHostSoa, DevSimAos simDevSoa); + +/* Graphics kernels */ + +void oclGraphics(cl_kernel vizKernel, DevSimSoa simDevSoa, size_t* nGlobal, size_t* nLocal); + +void oclRender(); + +void oclInitInterop(int ncells); + +#endif diff --git a/comd-cl/src-cl/initAtoms.c b/comd-cl/src-cl/initAtoms.c new file mode 100644 index 0000000..d9d9915 --- /dev/null +++ b/comd-cl/src-cl/initAtoms.c @@ -0,0 +1,235 @@ +/// \file +/// Initialize the atom configuration. + +#include "initAtoms.h" + +#include +#include + +#include "constants.h" +#include "decomposition.h" +#include "parallel.h" +#include "random.h" +#include "linkCells.h" +#include "timestep.h" +#include "memUtils.h" +#include "performanceTimers.h" + +static void computeVcm(SimFlat* s, real_t vcm[3]); + +/// \details +/// Call functions such as createFccLattice and setTemperature to set up +/// initial atom positions and momenta. +Atoms* initAtoms(LinkCell* boxes) +{ + Atoms* atoms = comdMalloc(sizeof(Atoms)); + + int maxTotalAtoms = MAXATOMS*boxes->nTotalBoxes; + + atoms->gid = (int*) comdMalloc(maxTotalAtoms*sizeof(int)); + atoms->iSpecies = (int*) comdMalloc(maxTotalAtoms*sizeof(int)); + atoms->r = (real3*) comdMalloc(maxTotalAtoms*sizeof(real3)); + atoms->p = (real3*) comdMalloc(maxTotalAtoms*sizeof(real3)); + atoms->f = (real3*) comdMalloc(maxTotalAtoms*sizeof(real3)); + atoms->U = (real_t*)comdMalloc(maxTotalAtoms*sizeof(real_t)); + + atoms->nLocal = 0; + atoms->nGlobal = 0; + + for (int iOff = 0; iOff < maxTotalAtoms; iOff++) + { + atoms->gid[iOff] = 0; + atoms->iSpecies[iOff] = 0; + zeroReal3(atoms->r[iOff]); + zeroReal3(atoms->p[iOff]); + zeroReal3(atoms->f[iOff]); + atoms->U[iOff] = 0.; + } + + return atoms; +} + +void destroyAtoms(Atoms *atoms) +{ + freeMe(atoms,gid); + freeMe(atoms,iSpecies); + freeMe(atoms,r); + freeMe(atoms,p); + freeMe(atoms,f); +} + +/// Creates atom positions on a face centered cubic (FCC) lattice with +/// nx * ny * nz unit cells and lattice constant lat. +/// Set momenta to zero. +void createFccLattice(int nx, int ny, int nz, real_t lat, SimFlat* s) +{ + const real_t* localMin = s->domain->localMin; // alias + const real_t* localMax = s->domain->localMax; // alias + + int nb = 4; // number of atoms in the basis + real3 basis[4] = { {0.25, 0.25, 0.25}, + {0.25, 0.75, 0.75}, + {0.75, 0.25, 0.75}, + {0.75, 0.75, 0.25} }; + + // create and place atoms + int begin[3]; + int end[3]; + for (int ii=0; ii<3; ++ii) + { + begin[ii] = floor(localMin[ii]/lat); + end[ii] = ceil (localMax[ii]/lat); + } + + real_t px,py,pz; + px=py=pz=0.0; + for (int ix=begin[0]; ix= localMax[0]) continue; + if (ry < localMin[1] || ry >= localMax[1]) continue; + if (rz < localMin[2] || rz >= localMax[2]) continue; + int id = ib+nb*(iz+nz*(iy+ny*(ix))); + putAtomInBox(s->boxes, s->atoms, id, 0, rx, ry, rz, px, py, pz); + } + + // set total atoms in simulation + startTimer(commReduceTimer); + addIntParallel(&s->atoms->nLocal, &s->atoms->nGlobal, 1); + stopTimer(commReduceTimer); + + printf("nGlobal = %d, should be %d\n", s->atoms->nGlobal, nb*nx*ny*nz); + for (int iBox = 0; iBox < s->boxes->nLocalBoxes; iBox++) + { + //printf("%d, %d\n", iBox, s->boxes->nAtoms[iBox]); + } + assert(s->atoms->nGlobal == nb*nx*ny*nz); +} + +/// Sets the center of mass velocity of the system. +/// \param [in] newVcm The desired center of mass velocity. +void setVcm(SimFlat* s, real_t newVcm[3]) +{ + real_t oldVcm[3]; + computeVcm(s, oldVcm); + + real_t vShift[3]; + vShift[0] = (newVcm[0] - oldVcm[0]); + vShift[1] = (newVcm[1] - oldVcm[1]); + vShift[2] = (newVcm[2] - oldVcm[2]); + + for (int iBox=0; iBoxboxes->nLocalBoxes; ++iBox) + { + for (int iOff=MAXATOMS*iBox, ii=0; iiboxes->nAtoms[iBox]; ++ii, ++iOff) + { + int iSpecies = s->atoms->iSpecies[iOff]; + real_t mass = s->species[iSpecies].mass; + + s->atoms->p[iOff][0] += mass * vShift[0]; + s->atoms->p[iOff][1] += mass * vShift[1]; + s->atoms->p[iOff][2] += mass * vShift[2]; + } + } +} + +/// Sets the temperature of system. +/// +/// Selects atom velocities randomly from a boltzmann (equilibrium) +/// distribution that corresponds to the specified temperature. This +/// random process will typically result in a small, but non zero center +/// of mass velocity and a small difference from the specified +/// temperature. For typical MD runs these small differences are +/// unimportant, However, to avoid possible confusion, we set the center +/// of mass velocity to zero and scale the velocities to exactly match +/// the input temperature. +void setTemperature(SimFlat* s, real_t temperature) +{ + // set initial velocities for the distribution + for (int iBox=0; iBoxboxes->nLocalBoxes; ++iBox) + { + for (int iOff=MAXATOMS*iBox, ii=0; iiboxes->nAtoms[iBox]; ++ii, ++iOff) + { + int iType = s->atoms->iSpecies[iOff]; + real_t mass = s->species[iType].mass; + real_t sigma = sqrt(kB_eV * temperature/mass); + uint64_t seed = mkSeed(s->atoms->gid[iOff], 123); + s->atoms->p[iOff][0] = mass * sigma * gasdev(&seed); + s->atoms->p[iOff][1] = mass * sigma * gasdev(&seed); + s->atoms->p[iOff][2] = mass * sigma * gasdev(&seed); + } + } + // compute the resulting temperature + // kinetic energy = 3/2 kB * Temperature + if (temperature == 0.0) return; + real_t vZero[3] = {0., 0., 0.}; + setVcm(s, vZero); + kineticEnergy(s); + real_t temp = (s->eKinetic/s->atoms->nGlobal)/kB_eV/1.5; + // scale the velocities to achieve the target temperature + real_t scaleFactor = sqrt(temperature/temp); + for (int iBox=0; iBoxboxes->nLocalBoxes; ++iBox) + { + for (int iOff=MAXATOMS*iBox, ii=0; iiboxes->nAtoms[iBox]; ++ii, ++iOff) + { + s->atoms->p[iOff][0] *= scaleFactor; + s->atoms->p[iOff][1] *= scaleFactor; + s->atoms->p[iOff][2] *= scaleFactor; + } + } + kineticEnergy(s); + temp = s->eKinetic/s->atoms->nGlobal/kB_eV/1.5; +} + +/// Add a random displacement to the atom positions. +/// Atoms are displaced by a random distance in the range +/// [-delta, +delta] along each axis. +/// \param [in] delta The maximum displacement (along each axis). +void randomDisplacements(SimFlat* s, real_t delta) +{ + for (int iBox=0; iBoxboxes->nLocalBoxes; ++iBox) + { + for (int iOff=MAXATOMS*iBox, ii=0; iiboxes->nAtoms[iBox]; ++ii, ++iOff) + { + uint64_t seed = mkSeed(s->atoms->gid[iOff], 457); + s->atoms->r[iOff][0] += (2.0*lcg61(&seed)-1.0) * delta; + s->atoms->r[iOff][1] += (2.0*lcg61(&seed)-1.0) * delta; + s->atoms->r[iOff][2] += (2.0*lcg61(&seed)-1.0) * delta; + } + } +} + +/// Computes the center of mass velocity of the system. +void computeVcm(SimFlat* s, real_t vcm[3]) +{ + real_t vcmLocal[4] = {0., 0., 0., 0.}; + real_t vcmSum[4] = {0., 0., 0., 0.}; + + // sum the momenta and particle masses + for (int iBox=0; iBoxboxes->nLocalBoxes; ++iBox) + { + for (int iOff=MAXATOMS*iBox, ii=0; iiboxes->nAtoms[iBox]; ++ii, ++iOff) + { + vcmLocal[0] += s->atoms->p[iOff][0]; + vcmLocal[1] += s->atoms->p[iOff][1]; + vcmLocal[2] += s->atoms->p[iOff][2]; + + int iSpecies = s->atoms->iSpecies[iOff]; + vcmLocal[3] += s->species[iSpecies].mass; + } + } + + startTimer(commReduceTimer); + addRealParallel(vcmLocal, vcmSum, 4); + stopTimer(commReduceTimer); + + real_t totalMass = vcmSum[3]; + vcm[0] = vcmSum[0]/totalMass; + vcm[1] = vcmSum[1]/totalMass; + vcm[2] = vcmSum[2]/totalMass; +} + diff --git a/comd-cl/src-cl/initAtoms.h b/comd-cl/src-cl/initAtoms.h new file mode 100644 index 0000000..b8241b0 --- /dev/null +++ b/comd-cl/src-cl/initAtoms.h @@ -0,0 +1,38 @@ +/// \file +/// Initialize the atom configuration. + +#ifndef __INIT_ATOMS_H +#define __INIT_ATOMS_H + +#include "mytype.h" + +struct SimFlatSt; +struct LinkCellSt; + +/// Atom data +typedef struct AtomsSt +{ + // atom-specific data + int nLocal; //!< total number of atoms on this processor + int nGlobal; //!< total number of atoms in simulation + + int* gid; //!< A globally unique id for each atom + int* iSpecies; //!< the species index of the atom + + real3* r; //!< positions + real3* p; //!< momenta of atoms + real3* f; //!< forces + real_t* U; //!< potential energy per atom +} Atoms; + + +/// Allocates memory to store atom data. +Atoms* initAtoms(struct LinkCellSt* boxes); +void destroyAtoms(struct AtomsSt* atoms); + +void createFccLattice(int nx, int ny, int nz, real_t lat, struct SimFlatSt* s); + +void setVcm(struct SimFlatSt* s, real_t vcm[3]); +void setTemperature(struct SimFlatSt* s, real_t temperature); +void randomDisplacements(struct SimFlatSt* s, real_t delta); +#endif diff --git a/comd-cl/src-cl/linkCells.c b/comd-cl/src-cl/linkCells.c new file mode 100644 index 0000000..53b4182 --- /dev/null +++ b/comd-cl/src-cl/linkCells.c @@ -0,0 +1,569 @@ +/// \file +/// Functions to maintain link cell structures for fast pair finding. + +#include "linkCells.h" + +#include +#include +#include +#include + +#include "parallel.h" +#include "memUtils.h" +#include "decomposition.h" +#include "performanceTimers.h" +#include "CoMDTypes.h" + +#define MIN(A,B) ((A) < (B) ? (A) : (B)) +#define MAX(A,B) ((A) > (B) ? (A) : (B)) + +static void copyAtom(LinkCell* boxes, Atoms* atoms, int iAtom, int iBox, int jAtom, int jBox); +static int getBoxFromCoord(LinkCell* boxes, real_t rr[3]); +static void emptyHaloCells(LinkCell* boxes); +static void getTuple(LinkCell* boxes, int iBox, int* ixp, int* iyp, int* izp); + +/// In CoMD 1.1, atoms are stored in link cells. Link cells are widely +/// used in classical MD to avoid an O(N^2) search for atoms that +/// interact. Link cells are formed by subdividing the local spatial +/// domain with a Cartesian grid where the grid spacing in each +/// direction is at least as big as he potential's cutoff distance. +/// Because atoms don't interact beyond the potential cutoff, for an +/// atom iAtom in any given link cell, we can be certain that all atoms +/// that interact with iAtom are contained in the same link cell, or one +/// of the 26 neighboring link cells. +/// +/// CoMD chooses the link cell size (boxSize) on each axis to be the +/// shortest possible distance, longer than cutoff, such that the local +/// domain size divided by boxSize is an integer. I.e., the link cells +/// are commensurate with with the local domain size. While this does +/// not result in the smallest possible link cells, it does allow us to +/// keep a strict separation between the link cells that are entirely +/// inside the local domain and those that represent halo regions. +/// +/// The number of local link cells in each direction is stored in +/// gridSize. Local link cells have 3D grid coordinates (ix, iy, iz) +/// where ix, iy, and iz can range from 0 to gridSize[iAxis]-1, +/// whiere iAxis is 0 for x, 1 for y and 2 for the z direction. The +/// number of local link cells is thus nLocalBoxes = +/// gridSize[0]*gridSize[1]*gridSize[2]. +/// +/// The local link cells are surrounded by one complete shell of halo +/// link cells. The halo cells provide temporary storage for halo or +/// "ghost" atoms that belong to other tasks, but whose coordinates are +/// needed locally to complete the force calculation. Halo link cells +/// have at least one coordinate with a value of either -1 or +/// gridSize[iAxis]. +/// +/// Because CoMD stores data in ordinary 1D C arrays, a mapping is +/// needed from the 3D grid coords to a 1D array index. For the local +/// cells we use the conventional mapping ix + iy*nx + iz*nx*ny. This +/// keeps all of the local cells in a contiguous region of memory +/// starting from the beginning of any relevant array and makes it easy +/// to iterate the local cells in a single loop. Halo cells are mapped +/// differently. After the local cells, the two planes of link cells +/// that are face neighbors with local cells across the -x or +x axis +/// are next. These are followed by face neighbors across the -y and +y +/// axis (including cells that are y-face neighbors with an x-plane of +/// halo cells), followed by all remaining cells in the -z and +z planes +/// of halo cells. The total number of link cells (on each rank) is +/// nTotalBoxes. +/// +/// Data storage arrays that are used in association with link cells +/// should be allocated to store nTotalBoxes*MAXATOMS items. Data for +/// the first atom in linkCell iBox is stored at index iBox*MAXATOMS. +/// Data for subsequent atoms in the same link cell are stored +/// sequentially, and the number of atoms in link cell iBox is +/// nAtoms[iBox]. +/// +/// \see getBoxFromTuple is the 3D->1D mapping for link cell indices. +/// \see getTuple is the 1D->3D mapping +/// +/// \param [in] cutoff The cutoff distance of the potential. +LinkCell* initLinkCells(const Domain* domain, real_t cutoff) +{ + assert(domain); + LinkCell* ll = comdMalloc(sizeof(LinkCell)); + + for (int i = 0; i < 3; i++) + { + ll->localMin[i] = domain->localMin[i]; + ll->localMax[i] = domain->localMax[i]; + ll->gridSize[i] = domain->localExtent[i] / cutoff; // local number of boxes + ll->boxSize[i] = domain->localExtent[i] / ((real_t) ll->gridSize[i]); + ll->invBoxSize[i] = 1.0/ll->boxSize[i]; + } + + ll->nInnerBoxes = (ll->gridSize[0]-2) * (ll->gridSize[1]-2) * (ll->gridSize[2]-2); + + ll->nLocalBoxes = ll->gridSize[0] * ll->gridSize[1] * ll->gridSize[2]; + + ll->nHaloBoxes = 2 * ((ll->gridSize[0] + 2) * + (ll->gridSize[1] + ll->gridSize[2] + 2) + + (ll->gridSize[1] * ll->gridSize[2])); + + printf ("Number of boxes: %d, %d, %d\n", ll->nInnerBoxes, ll->nLocalBoxes - ll->nInnerBoxes, ll->nHaloBoxes); + + ll->nTotalBoxes = ll->nLocalBoxes + ll->nHaloBoxes; + + ll->nAtoms = comdMalloc(ll->nTotalBoxes*sizeof(int)); + for (int iBox=0; iBoxnTotalBoxes; ++iBox) + ll->nAtoms[iBox] = 0; + + assert ( (ll->gridSize[0] >= 2) && (ll->gridSize[1] >= 2) && (ll->gridSize[2] >= 2) ); + // debug test for box allocation + for (int iBox = 0; iBox < ll->nTotalBoxes; iBox++) + { + int ix, iy, iz; + getTuple(ll, iBox, &ix, &iy, &iz); + //printf("Box %d is located at [%d, %d, %d]\n", iBox, ix, iy, iz); + } + return ll; +} + +void destroyLinkCells(LinkCell** boxes) +{ + if (! boxes) return; + if (! *boxes) return; + + comdFree((*boxes)->nAtoms); + comdFree(*boxes); + *boxes = NULL; + + return; +} + +/// \details +/// Populates the nbrBoxes array with the 27 boxes that are adjacent to +/// iBox. The count is 27 instead of 26 because iBox is included in the +/// list (as neighbor 13). Caller is responsible to alloc and free +/// nbrBoxes. +/// \return The number of nbr boxes (always 27 in this implementation). +int getNeighborBoxes(LinkCell* boxes, int iBox, int* nbrBoxes) +{ + int ix, iy, iz; + getTuple(boxes, iBox, &ix, &iy, &iz); + + int count = 0; + for (int i=ix-1; i<=ix+1; i++) + for (int j=iy-1; j<=iy+1; j++) + for (int k=iz-1; k<=iz+1; k++) + nbrBoxes[count++] = getBoxFromTuple(boxes,i,j,k); + + return count; +} + +/// \details +/// Finds the appropriate link cell for an atom based on the spatial +/// coordinates and stores data in that link cell. +/// \param [in] gid The global of the atom. +/// \param [in] iType The species index of the atom. +/// \param [in] x The x-coordinate of the atom. +/// \param [in] y The y-coordinate of the atom. +/// \param [in] z The z-coordinate of the atom. +/// \param [in] px The x-component of the atom's momentum. +/// \param [in] py The y-component of the atom's momentum. +/// \param [in] pz The z-component of the atom's momentum. +void putAtomInBox(LinkCell* boxes, Atoms* atoms, + const int gid, const int iType, + const real_t x, const real_t y, const real_t z, + const real_t px, const real_t py, const real_t pz) +{ + real_t xyz[3] = {x,y,z}; + + // Find correct box. + int iBox = getBoxFromCoord(boxes, xyz); + int iOff = iBox*MAXATOMS; + iOff += boxes->nAtoms[iBox]; + + // assign values to array elements + if (iBox < boxes->nLocalBoxes) + atoms->nLocal++; + boxes->nAtoms[iBox]++; + atoms->gid[iOff] = gid; + atoms->iSpecies[iOff] = iType; + + atoms->r[iOff][0] = x; + atoms->r[iOff][1] = y; + atoms->r[iOff][2] = z; + + atoms->p[iOff][0] = px; + atoms->p[iOff][1] = py; + atoms->p[iOff][2] = pz; +} + +/// Calculates the link cell index from the grid coords. The valid +/// coordinate range in direction ii is [-1, gridSize[ii]]. Any +/// coordinate that involves a -1 or gridSize[ii] is a halo link cell. +/// Because of the order in which the local and halo link cells are +/// stored the indices of the halo cells are special cases. +/// Further modified for OpenCL so that Inner cells are first, followed by +/// 'skin' cells and then halo cells. +/// \see initLinkCells for an explanation of storage order. +int getBoxFromTuple(LinkCell* boxes, int ix, int iy, int iz) +{ + int iBox = 0; + const int* gridSize = boxes->gridSize; // alias + + int innerSize[3]; + innerSize[0] = gridSize[0]-2; + innerSize[1] = gridSize[1]-2; + innerSize[2] = gridSize[2]-2; + + // Halo in Z+ + if (iz == gridSize[2]) + { + iBox = boxes->nLocalBoxes + 2*gridSize[2]*gridSize[1] + 2*gridSize[2]*(gridSize[0]+2) + + (gridSize[0]+2)*(gridSize[1]+2) + (gridSize[0]+2)*(iy+1) + (ix+1); + } + // Halo in Z- + else if (iz == -1) + { + iBox = boxes->nLocalBoxes + 2*gridSize[2]*gridSize[1] + 2*gridSize[2]*(gridSize[0]+2) + + (gridSize[0]+2)*(iy+1) + (ix+1); + } + // Halo in Y+ + else if (iy == gridSize[1]) + { + iBox = boxes->nLocalBoxes + 2*gridSize[2]*gridSize[1] + gridSize[2]*(gridSize[0]+2) + + (gridSize[0]+2)*iz + (ix+1); + } + // Halo in Y- + else if (iy == -1) + { + iBox = boxes->nLocalBoxes + 2*gridSize[2]*gridSize[1] + iz*(gridSize[0]+2) + (ix+1); + } + // Halo in X+ + else if (ix == gridSize[0]) + { + iBox = boxes->nLocalBoxes + gridSize[1]*gridSize[2] + iz*gridSize[1] + iy; + } + // Halo in X- + else if (ix == -1) + { + iBox = boxes->nLocalBoxes + iz*gridSize[1] + iy; + } + // Skin in Z+ + else if (iz == gridSize[2]-1) + { + iBox = boxes->nInnerBoxes + 2*innerSize[2]*innerSize[1] + 2*innerSize[2]*(innerSize[0]+2) + + (innerSize[0]+2)*(innerSize[1]+2) + (innerSize[0]+2)*(iy+0) + (ix+0); + } + // Skin in Z- + else if (iz == 0) + { + iBox = boxes->nInnerBoxes + 2*innerSize[2]*innerSize[1] + 2*innerSize[2]*(innerSize[0]+2) + + (innerSize[0]+2)*(iy+0) + (ix+0); + } + // Skin in Y+ + else if (iy == gridSize[1]-1) + { + iBox = boxes->nInnerBoxes + 2*innerSize[2]*innerSize[1] + innerSize[2]*(innerSize[0]+2) + + (innerSize[0]+2)*(iz-1) + (ix+0); + } + // Skin in Y- + else if (iy == 0) + { + iBox = boxes->nInnerBoxes + 2*innerSize[2]*innerSize[1] + (iz-1)*(innerSize[0]+2) + (ix+0); + } + // Skin in X+ + else if (ix == gridSize[0]-1) + { + iBox = boxes->nInnerBoxes + innerSize[1]*innerSize[2] + (iz-1)*innerSize[1] + (iy-1); + } + // Skin in X- + else if (ix == 0) + { + iBox = boxes->nInnerBoxes + (iz-1)*innerSize[1] + (iy-1); + } + + // innerl link cell. + else + { + iBox = (ix-1) + (innerSize[0])*(iy-1) + (innerSize[0])*(innerSize[1])*(iz-1); + } + assert(iBox >= 0); + assert(iBox < boxes->nTotalBoxes); + + return iBox; +} + +/// Move an atom from one link cell to another. +/// \param iId [in] The index with box iBox of the atom to be moved. +/// \param iBox [in] The index of the link cell the particle is moving from. +/// \param jBox [in] The index of the link cell the particle is moving to. +void moveAtom(LinkCell* boxes, Atoms* atoms, int iId, int iBox, int jBox) +{ + int nj = boxes->nAtoms[jBox]; + copyAtom(boxes, atoms, iId, iBox, nj, jBox); + boxes->nAtoms[jBox]++; + + assert(boxes->nAtoms[jBox] < MAXATOMS); + + boxes->nAtoms[iBox]--; + int ni = boxes->nAtoms[iBox]; + if (ni) copyAtom(boxes, atoms, ni, iBox, iId, iBox); + + if (jBox > boxes->nLocalBoxes) + --atoms->nLocal; + + return; +} + +/// \details +/// This is the first step in returning data structures to a consistent +/// state after the atoms move each time step. First we discard all +/// atoms in the halo link cells. These are all atoms that are +/// currently stored on other ranks and so any information we have about +/// them is stale. Next, we move any atoms that have crossed link cell +/// boundaries into their new link cells. It is likely that some atoms +/// will be moved into halo link cells. Since we have deleted halo +/// atoms from other tasks, it is clear that any atoms that are in halo +/// cells at the end of this routine have just transitioned from local +/// to halo atoms. Such atom must be sent to other tasks by a halo +/// exchange to avoid being lost. +/// \see redistributeAtoms +void updateLinkCells(LinkCell* boxes, Atoms* atoms) +{ + emptyHaloCells(boxes); + + for (int iBox=0; iBoxnLocalBoxes; ++iBox) + { + int iOff = iBox*MAXATOMS; + int ii=0; + while (ii < boxes->nAtoms[iBox]) + { + int jBox = getBoxFromCoord(boxes, atoms->r[iOff+ii]); + if (jBox != iBox) + moveAtom(boxes, atoms, ii, iBox, jBox); + else + ++ii; + } + } +} + +/// \return The largest number of atoms in any link cell. +int maxOccupancy(LinkCell* boxes) +{ + int localMax = 0; + for (int ii=0; iinLocalBoxes; ++ii) + localMax = MAX(localMax, boxes->nAtoms[ii]); + + int globalMax; + + startTimer(commReduceTimer); + maxIntParallel(&localMax, &globalMax, 1); + stopTimer(commReduceTimer); + + return globalMax; +} + +/// Copy atom iAtom in link cell iBox to atom jAtom in link cell jBox. +/// Any data at jAtom, jBox is overwritten. This routine can be used to +/// re-order atoms within a link cell. +void copyAtom(LinkCell* boxes, Atoms* atoms, int iAtom, int iBox, int jAtom, int jBox) +{ + const int iOff = MAXATOMS*iBox+iAtom; + const int jOff = MAXATOMS*jBox+jAtom; + atoms->gid[jOff] = atoms->gid[iOff]; + atoms->iSpecies[jOff] = atoms->iSpecies[iOff]; + memcpy(atoms->r[jOff], atoms->r[iOff], sizeof(real3)); + memcpy(atoms->p[jOff], atoms->p[iOff], sizeof(real3)); + memcpy(atoms->f[jOff], atoms->f[iOff], sizeof(real3)); + memcpy(atoms->U+jOff, atoms->U+iOff, sizeof(real_t)); +} + +/// Get the index of the link cell that contains the specified +/// coordinate. This can be either a halo or a local link cell. +/// +/// Because the rank ownership of an atom is strictly determined by the +/// atom's position, we need to take care that all ranks will agree which +/// rank owns an atom. The conditionals at the end of this function are +/// special care to ensure that all ranks make compatible link cell +/// assignments for atoms that are near a link cell boundaries. If no +/// ranks claim an atom in a local cell it will be lost. If multiple +/// ranks claim an atom it will be duplicated. +int getBoxFromCoord(LinkCell* boxes, real_t rr[3]) +{ + const real_t* localMin = boxes->localMin; // alias + const real_t* localMax = boxes->localMax; // alias + const int* gridSize = boxes->gridSize; // alias + int ix = (int)(floor((rr[0] - localMin[0])*boxes->invBoxSize[0])); + int iy = (int)(floor((rr[1] - localMin[1])*boxes->invBoxSize[1])); + int iz = (int)(floor((rr[2] - localMin[2])*boxes->invBoxSize[2])); + + + // For each axis, if we are inside the local domain, make sure we get + // a local link cell. Otherwise, make sure we get a halo link cell. + if (rr[0] < localMax[0]) + { + if (ix == gridSize[0]) ix = gridSize[0] - 1; + } + else + ix = gridSize[0]; // assign to halo cell + if (rr[1] < localMax[1]) + { + if (iy == gridSize[1]) iy = gridSize[1] - 1; + } + else + iy = gridSize[1]; + if (rr[2] < localMax[2]) + { + if (iz == gridSize[2]) iz = gridSize[2] - 1; + } + else + iz = gridSize[2]; + + return getBoxFromTuple(boxes, ix, iy, iz); +} + +/// Set the number of atoms to zero in all halo link cells. +void emptyHaloCells(LinkCell* boxes) +{ + for (int ii=boxes->nLocalBoxes; iinTotalBoxes; ++ii) + boxes->nAtoms[ii] = 0; +} + +/// Get the grid coordinates of the link cell with index iBox. Local +/// cells are easy as they use a standard 1D->3D mapping. Halo cell are +/// special cases. +/// \see initLinkCells for information on link cell order. +/// \param [in] iBox Index to link cell for which tuple is needed. +/// \param [out] ixp x grid coord of link cell. +/// \param [out] iyp y grid coord of link cell. +/// \param [out] izp z grid coord of link cell. +void getTuple(LinkCell* boxes, int iBox, int* ixp, int* iyp, int* izp) +{ + int ix, iy, iz; + const int* gridSize = boxes->gridSize; // alias + + int innerSize[3]; + innerSize[0] = gridSize[0]-2; + innerSize[1] = gridSize[1]-2; + innerSize[2] = gridSize[2]-2; + + // If an inner box + if( iBox < boxes->nInnerBoxes) + { + ix = iBox % innerSize[0]; + iBox /= innerSize[0]; + iy = iBox % innerSize[1]; + iz = iBox / innerSize[1]; + // Calculated as off by -1 + ix ++; + iy ++; + iz ++; + } + // it's a skin box + else if (iBox >= boxes->nInnerBoxes && iBox < boxes->nLocalBoxes) + { + int ink; + ink = iBox - boxes->nInnerBoxes; + if (ink < 2*innerSize[1]*innerSize[2]) + { + if (ink < innerSize[1]*innerSize[2]) + { + ix = 0; + } + else + { + ink -= innerSize[1]*innerSize[2]; + ix = innerSize[0] + 1; + } + iy = 1 + ink % innerSize[1]; + iz = 1 + ink / innerSize[1]; + } + else if (ink < (2 * innerSize[2] * (innerSize[1] + innerSize[0] + 2))) + { + ink -= 2 * innerSize[2] * innerSize[1]; + if (ink < ((innerSize[0] + 2) *innerSize[2])) + { + iy = 0; + } + else + { + ink -= (innerSize[0] + 2) * innerSize[2]; + iy = innerSize[1] + 1; + } + ix = ink % (innerSize[0] + 2); + iz = 1 + ink / (innerSize[0] + 2); + } + else + { + ink -= 2 * innerSize[2] * (innerSize[1] + innerSize[0] + 2); + if (ink < ((innerSize[0] + 2) * (innerSize[1] + 2))) + { + iz = 0; + } + else + { + ink -= (innerSize[0] + 2) * (innerSize[1] + 2); + iz = innerSize[2] + 1; + } + ix = ink % (innerSize[0] + 2); + iy = ink / (innerSize[0] + 2); + } + // These have zero offset + + } + // It's a halo box + else + { + int ink; + ink = iBox - boxes->nLocalBoxes; + if (ink < 2*gridSize[1]*gridSize[2]) + { + if (ink < gridSize[1]*gridSize[2]) + { + ix = 0; + } + else + { + ink -= gridSize[1]*gridSize[2]; + ix = gridSize[0] + 1; + } + iy = 1 + ink % gridSize[1]; + iz = 1 + ink / gridSize[1]; + } + else if (ink < (2 * gridSize[2] * (gridSize[1] + gridSize[0] + 2))) + { + ink -= 2 * gridSize[2] * gridSize[1]; + if (ink < ((gridSize[0] + 2) *gridSize[2])) + { + iy = 0; + } + else + { + ink -= (gridSize[0] + 2) * gridSize[2]; + iy = gridSize[1] + 1; + } + ix = ink % (gridSize[0] + 2); + iz = 1 + ink / (gridSize[0] + 2); + } + else + { + ink -= 2 * gridSize[2] * (gridSize[1] + gridSize[0] + 2); + if (ink < ((gridSize[0] + 2) * (gridSize[1] + 2))) + { + iz = 0; + } + else + { + ink -= (gridSize[0] + 2) * (gridSize[1] + 2); + iz = gridSize[2] + 1; + } + ix = ink % (gridSize[0] + 2); + iy = ink / (gridSize[0] + 2); + } + + // Calculated as off by +1 + ix--; + iy--; + iz--; + } + + *ixp = ix; + *iyp = iy; + *izp = iz; +} + + diff --git a/comd-cl/src-cl/linkCells.h b/comd-cl/src-cl/linkCells.h new file mode 100644 index 0000000..042011d --- /dev/null +++ b/comd-cl/src-cl/linkCells.h @@ -0,0 +1,83 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +/// \file +/// Functions to maintain link cell structures for fast pair finding. + +#ifndef __LINK_CELLS_H_ +#define __LINK_CELLS_H_ + +#include "mytype.h" + +/// The maximum number of atoms that can be stored in a link cell. +#define MAXATOMS 64 + +struct DomainSt; +struct AtomsSt; + +/// Link cell data. For convenience, we keep a copy of the localMin and +/// localMax coordinates that are also found in the DomainsSt. +typedef struct LinkCellSt +{ + int gridSize[3]; //!< number of boxes in each dimension on processor + int nInnerBoxes; //!< boxes which do not contribute to halos + int nLocalBoxes; //!< total number of local boxes on processor + int nHaloBoxes; //!< total number of remote halo/ghost boxes on processor + + int nTotalBoxes; //!< total number of boxes on processor + //!< nLocalBoxes + nHaloBoxes + real3 localMin; //!< minimum local bounds on processor + real3 localMax; //!< maximum local bounds on processor + real3 boxSize; //!< size of box in each dimension + real3 invBoxSize; //!< inverse size of box in each dimension + + int* nAtoms; //!< total number of atoms in each box +} LinkCell; + +LinkCell* initLinkCells(const struct DomainSt* domain, real_t cutoff); +void destroyLinkCells(LinkCell** boxes); + +int getNeighborBoxes(LinkCell* boxes, int iBox, int* nbrBoxes); +void putAtomInBox(LinkCell* boxes, struct AtomsSt* atoms, + const int gid, const int iType, + const real_t x, const real_t y, const real_t z, + const real_t px, const real_t py, const real_t pz); +int getBoxFromTuple(LinkCell* boxes, int x, int y, int z); + +void moveAtom(LinkCell* boxes, struct AtomsSt* atoms, int iId, int iBox, int jBox); + +/// Update link cell data structures when the atoms have moved. +void updateLinkCells(LinkCell* boxes, struct AtomsSt* atoms); + +int maxOccupancy(LinkCell* boxes); + + +#endif diff --git a/comd-cl/src-cl/linkCellsCL.c b/comd-cl/src-cl/linkCellsCL.c new file mode 100644 index 0000000..dea08c0 --- /dev/null +++ b/comd-cl/src-cl/linkCellsCL.c @@ -0,0 +1,209 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#include "helpers.h" + +HostBoxes* initHostBoxesSoa(SimFlat* sim) +{ + HostBoxes* boxes; + + boxes = malloc(sizeof(HostBoxes)); + + boxes->boxSize = malloc(3*sizeof(cl_real)); + boxes->invBoxSize = malloc(3*sizeof(cl_real)); + + boxes->nTotalBoxes = sim->boxes->nTotalBoxes; + boxes->nHaloBoxes = sim->boxes->nHaloBoxes; + boxes->nLocalBoxes = sim->boxes->nLocalBoxes; + + printf("Allocating space on host for %d local and %d halo boxes\n", boxes->nLocalBoxes, boxes->nHaloBoxes); + + boxes->nLocalBoxesNeighborSize = boxes->nLocalBoxes*NUMNEIGHBORS*sizeof(cl_int); + boxes->nLocalBoxesRealSize = boxes->nLocalBoxes*sizeof(cl_real); + boxes->nLocalBoxesIntSize = boxes->nLocalBoxes*sizeof(cl_int); + + boxes->nTotalBoxesIntSize = boxes->nTotalBoxes*sizeof(cl_int); + + for (int j=0;j<3;j++) + { + boxes->boxSize[j] = sim->boxes->boxSize[j]; + boxes->invBoxSize[j] = sim->boxes->invBoxSize[j]; + } + + // only need neighbor lists for local boxes + boxes->neighborList = malloc(boxes->nLocalBoxesNeighborSize); + boxes->nNeighbors = malloc(boxes->nLocalBoxesIntSize); + for (int iBox=0;iBoxboxes->nLocalBoxes;iBox++) + { + + int nbrBoxes[27]; + boxes->nNeighbors[iBox] = getNeighborBoxes(sim->boxes,iBox, nbrBoxes); + // check if any boxes are missing neighbors + if (boxes->nNeighbors[iBox] < 27) + printf("Box %d has only %d neighbors\n", iBox, boxes->nNeighbors[iBox]); + + for (int j=0;jnNeighbors[iBox];j++) + { + boxes->neighborList[NUMNEIGHBORS*iBox + j] = nbrBoxes[j]; + } + + } + + // need nAtoms for all boxes + boxes->nAtoms = malloc(boxes->nTotalBoxesIntSize); + for (int iBox=0;iBoxboxes->nTotalBoxes;iBox++) + { + boxes->nAtoms[iBox] = sim->boxes->nAtoms[iBox]; + } + + // cehck box occupancy for all local boxes + int nMaxInBox = 0; + int boxWithMax = 0; + for (int iBox=0;iBoxnLocalBoxes;iBox++) + { + if (sim->boxes->nAtoms[iBox] > nMaxInBox) + { + nMaxInBox = sim->boxes->nAtoms[iBox]; + boxWithMax = iBox; + } + } + printf("Max atom count %d in box %d\n", nMaxInBox, boxWithMax); + + return boxes; +} + +HostBoxes* initHostBoxesAos(SimFlat* sim) +{ + HostBoxes* boxes; + + boxes = malloc(sizeof(HostBoxes)); + + boxes->nTotalBoxes = sim->boxes->nTotalBoxes; + boxes->nLocalBoxes = sim->boxes->nLocalBoxes; + + int nMaxInBox = 0; + int boxWithMax = 0; + for (int iBox=0;iBoxnTotalBoxes;iBox++) + { + if (sim->boxes->nAtoms[iBox] > nMaxInBox) + { + nMaxInBox = sim->boxes->nAtoms[iBox]; + boxWithMax = iBox; + } + } + printf("Max atom count %d in box %d\n", nMaxInBox, boxWithMax); + + boxes->nLocalBoxesNeighborSize = sim->boxes->nLocalBoxes*NUMNEIGHBORS*sizeof(cl_int); + boxes->nLocalBoxesRealSize = sim->boxes->nLocalBoxes*sizeof(cl_real); + boxes->nTotalBoxesIntSize = sim->boxes->nTotalBoxes*sizeof(cl_int); + + boxes->neighborList = malloc(boxes->nLocalBoxesNeighborSize); + boxes->nNeighbors = malloc(boxes->nLocalBoxesIntSize); + boxes->nAtoms = malloc(boxes->nTotalBoxesIntSize); + + boxes->boxSize = malloc(sizeof(cl_real4)); + boxes->invBoxSize = malloc(sizeof(cl_real4)); + + + for (int j=0;j<3;j++) + { + boxes->boxSize[j] = sim->boxes->boxSize[j]; + boxes->invBoxSize[j] = sim->boxes->invBoxSize[j]; + } + + for (int iBox=0;iBoxboxes->nLocalBoxes;iBox++) + { + + int* nbrBoxes; + getNeighborBoxes(sim->boxes,iBox, nbrBoxes); + + boxes->nAtoms[iBox] = sim->boxes->nAtoms[iBox]; + + int j; + boxes->nNeighbors[iBox] = nbrBoxes[-1]; + for (int j=0;jnNeighbors[iBox];j++) + { + boxes->neighborList[NUMNEIGHBORS*iBox + j] = nbrBoxes[j]; + } + } + + return boxes; +} + +void createDevBoxesSoa(DevBoxesSoa* boxesDev, HostBoxes* hostBoxes) +{ + /// Create the device buffers to hold the boxes data: + + oclCreateReadWriteBuffer(&boxesDev->neighborList, hostBoxes->nLocalBoxesNeighborSize); + oclCreateReadWriteBuffer(&boxesDev->nNeighbors, hostBoxes->nLocalBoxesIntSize); + oclCreateReadWriteBuffer(&boxesDev->nAtoms, hostBoxes->nTotalBoxesIntSize); + + oclCreateReadWriteBuffer(&boxesDev->boxSize, sizeof(cl_real)*3); + oclCreateReadWriteBuffer(&boxesDev->invBoxSize, sizeof(cl_real)*3); + oclCreateReadWriteBuffer(&boxesDev->nAtomsPfx, sizeof(int)*hostBoxes->nLocalBoxes); + + boxesDev->nLocalBoxes = hostBoxes->nLocalBoxes; +} + +void createDevBoxesAos(DevBoxesAos* boxesDev, HostBoxes* hostBoxes) +{ + /// Create the device buffers to hold the boxes data: + + oclCreateReadWriteBuffer(&boxesDev->neighborList, hostBoxes->nLocalBoxesNeighborSize); + oclCreateReadWriteBuffer(&boxesDev->nNeighbors, hostBoxes->nLocalBoxesIntSize); + oclCreateReadWriteBuffer(&boxesDev->nAtoms, hostBoxes->nTotalBoxesIntSize); + + oclCreateReadWriteBuffer(&boxesDev->boxSize, sizeof(cl_real4)); + oclCreateReadWriteBuffer(&boxesDev->invBoxSize, sizeof(cl_real4)); +} + +void putBoxesSoa(HostBoxes* boxesHost, DevBoxesSoa* boxesDev) +{ + oclCopyToDevice(boxesHost->nNeighbors, boxesDev->nNeighbors, boxesHost->nLocalBoxesIntSize, 0); + oclCopyToDevice(boxesHost->neighborList, boxesDev->neighborList, boxesHost->nLocalBoxesNeighborSize, 0); + + oclCopyToDevice(boxesHost->nAtoms, boxesDev->nAtoms, boxesHost->nTotalBoxesIntSize, 0); + + oclCopyToDevice(boxesHost->boxSize, boxesDev->boxSize, sizeof(cl_real)*3, 0); + oclCopyToDevice(boxesHost->invBoxSize, boxesDev->invBoxSize, sizeof(cl_real)*3, 0); +} + +void putBoxesAos(HostBoxes* boxesHost, DevBoxesAos* boxesDev) +{ + oclCopyToDevice(boxesHost->nNeighbors, boxesDev->nNeighbors, boxesHost->nLocalBoxesIntSize, 0); + oclCopyToDevice(boxesHost->neighborList, boxesDev->neighborList, boxesHost->nLocalBoxesNeighborSize, 0); + + oclCopyToDevice(boxesHost->nAtoms, boxesDev->nAtoms, boxesHost->nTotalBoxesIntSize, 0); + + oclCopyToDevice(boxesHost->boxSize, boxesDev->boxSize, sizeof(cl_real4), 0); + oclCopyToDevice(boxesHost->invBoxSize, boxesDev->invBoxSize, sizeof(cl_real4), 0); +} + diff --git a/comd-cl/src-cl/linkCellsCL.h b/comd-cl/src-cl/linkCellsCL.h new file mode 100644 index 0000000..4bcaad2 --- /dev/null +++ b/comd-cl/src-cl/linkCellsCL.h @@ -0,0 +1,94 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef LINKCELLSCL_H +#define LINKCELLSCL_H + +#include "cl_utils.h" +#include "CoMDTypes.h" + +typedef struct HostBoxesSt +{ + cl_int nLocalBoxes; + cl_int nHaloBoxes; + cl_int nTotalBoxes; + + cl_int* neighborList; + cl_int* nNeighbors; + cl_int* nAtoms; + + cl_real* boxSize; + cl_real* invBoxSize; + + int nTotalBoxesIntSize; + + int nLocalBoxesIntSize; + int nLocalBoxesNeighborSize; + int nLocalBoxesRealSize; +} HostBoxes; + +typedef struct DevBoxesSoaSt +{ + cl_int nLocalBoxes; + + DevVec rBox; + cl_mem neighborList; + cl_mem nNeighbors; + cl_mem nAtoms; + cl_mem boxSize; + cl_mem invBoxSize; + cl_mem nAtomsPfx; + +} DevBoxesSoa; + +typedef struct DevBoxesAosSt +{ + cl_mem rBox; + cl_mem neighborList; + cl_mem nNeighbors; + cl_mem nAtoms; + cl_mem boxSize; + cl_mem invBoxSize; +} DevBoxesAos; + +HostBoxes* initHostBoxesSoa(SimFlat* sim); + +HostBoxes* initHostBoxesAos(SimFlat* sim); + +void createDevBoxesSoa(DevBoxesSoa *boxesDev, HostBoxes* hostBoxes); + +void createDevBoxesAos(DevBoxesAos *boxesDev, HostBoxes* hostBoxes); + +void putBoxesSoa(HostBoxes* boxesHost, DevBoxesSoa* boxesDev); + +void putBoxesAos(HostBoxes* boxesHost, DevBoxesAos* boxesDev); + +#endif diff --git a/comd-cl/src-cl/ljCL.c b/comd-cl/src-cl/ljCL.c new file mode 100644 index 0000000..3f2ce3a --- /dev/null +++ b/comd-cl/src-cl/ljCL.c @@ -0,0 +1,128 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#include "ljCL.h" + +#include "ljForce.h" +#include "helpers.h" + +void initHostLj(HostLjPot *ljPot_H, SimFlat *sim) +{ + /** Allocate and initialize all the LJ potential data needed **/ + + LjPotential *new_pot; + new_pot = (LjPotential*) sim->pot; + ljPot_H->sigma = new_pot->sigma; + ljPot_H->epsilon = new_pot->epsilon; + ljPot_H->cutoff = new_pot->cutoff; + + printf("Using Lennard-Jones potential\n"); + printf("Epsilon = %f eV\n", ljPot_H->epsilon); + printf("Sigma = %f Angstroms\n", ljPot_H->sigma); + printf("Cutoff = %f Angstroms\n", ljPot_H->cutoff); + +} + +void setLjArgsSoa(cl_kernel ljForce, + DevSimSoa* devSim) +{ + /** Set the kernel arguments for the LJ force kernel **/ + + printf("Setting LJ kernel arguments\n"); + // set kernel arguments for ljForce + int err = 0; + int nArg = 0; + // field arrays + err = clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.r.x); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.r.y); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.r.z); + + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.f.x); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.f.y); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.f.z); + + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.U); + // boxes data + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->boxes.neighborList); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->boxes.nNeighbors); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + // potential data + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_real), &devSim->ljPot.sigma); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_real), &devSim->ljPot.epsilon); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_real), &devSim->ljPot.cutoff); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_int), &devSim->boxes.nLocalBoxes); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->boxes.nAtomsPfx); + + if (err != CL_SUCCESS) + { + printf("Error: Failed to set ljForce arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("ljForce arguments set\n"); + } +} + +void setLjArgsAos(cl_kernel ljForce, + DevSimAos* devSim) +{ + /** Set the kernel arguments for the LJ force kernel **/ + + printf("Setting LJ kernel arguments\n"); + // set kernel arguments for ljForce + int err = 0; + int nArg = 0; + // field arrays + err = clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.r); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.f); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->atoms.U); + // boxes data + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->boxes.neighborList); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->boxes.nNeighbors); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + // potential data + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_real), &devSim->ljPot.sigma); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_real), &devSim->ljPot.epsilon); + err |= clSetKernelArg(ljForce, nArg++, sizeof(cl_real), &devSim->ljPot.cutoff); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set ljForceAos arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("ljForceAos arguments set\n"); + } +} + diff --git a/comd-cl/src-cl/ljCL.h b/comd-cl/src-cl/ljCL.h new file mode 100644 index 0000000..3aae3e3 --- /dev/null +++ b/comd-cl/src-cl/ljCL.h @@ -0,0 +1,30 @@ +#ifndef LJCL_H +#define LJCL_H + +#include "cl_utils.h" +#include "CoMDTypes.h" + +struct DevSimSoaSt; +struct DevSimAosSt; + +typedef struct HostLjPotSt +{ + cl_real cutoff; + cl_real sigma; + cl_real epsilon; +} HostLjPot; + +typedef struct DevLjPotSt +{ + cl_real cutoff; + cl_real sigma; + cl_real epsilon; +} DevLjPot; + +void setLjArgsSoa(cl_kernel ljForce, struct DevSimSoaSt* simDev); + +void setLjArgsAos(cl_kernel ljForce, struct DevSimAosSt* simDev); + +void initHostLj(HostLjPot *ljPot_H, SimFlat *sim); + +#endif diff --git a/comd-cl/src-cl/ljForce.c b/comd-cl/src-cl/ljForce.c new file mode 100644 index 0000000..cf73eb9 --- /dev/null +++ b/comd-cl/src-cl/ljForce.c @@ -0,0 +1,265 @@ +/// \file +/// Computes forces for the 12-6 Lennard Jones (LJ) potential. +/// +/// The Lennard-Jones model is not a good representation for the +/// bonding in copper, its use has been limited to constant volume +/// simulations where the embedding energy contribution to the cohesive +/// energy is not included in the two-body potential +/// +/// The parameters here are taken from Wolf and Phillpot and fit to the +/// room temperature lattice constant and the bulk melt temperature +/// Ref: D. Wolf and S.Yip eds. Materials Interfaces (Chapman & Hall +/// 1992) Page 230. +/// +/// Notes on LJ: +/// +/// http://en.wikipedia.org/wiki/Lennard_Jones_potential +/// +/// The total inter-atomic potential energy in the LJ model is: +/// +/// \f[ +/// E_{tot} = \sum_{ij} U_{LJ}(r_{ij}) +/// \f] +/// \f[ +/// U_{LJ}(r_{ij}) = 4 \epsilon +/// \left\{ \left(\frac{\sigma}{r_{ij}}\right)^{12} +/// - \left(\frac{\sigma}{r_{ij}}\right)^6 \right\} +/// \f] +/// +/// where \f$\epsilon\f$ and \f$\sigma\f$ are the material parameters in the potential. +/// - \f$\epsilon\f$ = well depth +/// - \f$\sigma\f$ = hard sphere diameter +/// +/// To limit the interation range, the LJ potential is typically +/// truncated to zero at some cutoff distance. A common choice for the +/// cutoff distance is 2.5 * \f$\sigma\f$. +/// This implementation can optionally shift the potential slightly +/// upward so the value of the potential is zero at the cuotff +/// distance. This shift has no effect on the particle dynamics. +/// +/// +/// The force on atom i is given by +/// +/// \f[ +/// F_i = -\nabla_i \sum_{jk} U_{LJ}(r_{jk}) +/// \f] +/// +/// where the subsrcipt i on the gradient operator indicates that the +/// derivatives are taken with respect to the coordinates of atom i. +/// Liberal use of the chain rule leads to the expression +/// +/// \f{eqnarray*}{ +/// F_i &=& - \sum_j U'_{LJ}(r_{ij})\hat{r}_{ij}\\ +/// &=& \sum_j 24 \frac{\epsilon}{r_{ij}} \left\{ 2 \left(\frac{\sigma}{r_{ij}}\right)^{12} +/// - \left(\frac{\sigma}{r_{ij}}\right)^6 \right\} \hat{r}_{ij} +/// \f} +/// +/// where \f$\hat{r}_{ij}\f$ is a unit vector in the direction from atom +/// i to atom j. +/// +/// + +#include "ljForce.h" + +#include +#include +#include + +#include "constants.h" +#include "mytype.h" +#include "parallel.h" +#include "linkCells.h" +#include "memUtils.h" +#include "CoMDTypes.h" + +#define POT_SHIFT 1.0 + + +static int ljForce(SimFlat* s); +static void ljPrint(FILE* file, BasePotential* pot); + +void ljDestroy(BasePotential** inppot) +{ + if ( ! inppot ) return; + LjPotential* pot = (LjPotential*)(*inppot); + if ( ! pot ) return; + comdFree(pot); + *inppot = NULL; + + return; +} + +/// Initialize an Lennard Jones potential for Copper. +BasePotential* initLjPot(void) +{ + LjPotential *pot = (LjPotential*)comdMalloc(sizeof(LjPotential)); + pot->force = ljForce; + pot->print = ljPrint; + pot->destroy = ljDestroy; + //pot->sigma = 2.315; // Angstrom + //pot->epsilon = 0.167; // eV + //pot->mass = 63.55 * amuToInternalMass; // Atomic Mass Units (amu) + + //pot->lat = 3.615; // Equilibrium lattice const in Angs + strcpy(pot->latticeType, "FCC"); // lattice type, i.e. FCC, BCC, etc. + //pot->cutoff = 2.5*pot->sigma; // Potential cutoff in Angs + + strcpy(pot->name, "Cu"); + pot->atomicNo = 29; + + // LJ potential for testing stress with LAMMPS values + pot->sigma = 1.53; + pot->epsilon = 0.0085; + pot->cutoff = 3.0*pot->sigma; + pot->mass = 1.0 * amuToInternalMass; + pot->lat = pot->sigma*1.587401052; + + return (BasePotential*) pot; +} + +void ljPrint(FILE* file, BasePotential* pot) +{ + LjPotential* ljPot = (LjPotential*) pot; + fprintf(file, " Potential type : Lennard-Jones\n"); + fprintf(file, " Species name : %s\n", ljPot->name); + fprintf(file, " Atomic number : %d\n", ljPot->atomicNo); + fprintf(file, " Mass : "FMT1" amu\n", ljPot->mass / amuToInternalMass); // print in amu + fprintf(file, " Lattice Type : %s\n", ljPot->latticeType); + fprintf(file, " Lattice spacing : "FMT1" Angstroms\n", ljPot->lat); + fprintf(file, " Cutoff : "FMT1" Angstroms\n", ljPot->cutoff); + fprintf(file, " Epsilon : "FMT1" eV\n", ljPot->epsilon); + fprintf(file, " Sigma : "FMT1" Angstroms\n", ljPot->sigma); +} + +int ljForce(SimFlat* s) +{ + LjPotential* pot = (LjPotential *) s->pot; + real_t sigma = pot->sigma; + real_t epsilon = pot->epsilon; + real_t rCut = pot->cutoff; + real_t rCut2 = rCut*rCut; + + // zero forces and energy + real_t ePot = 0.0; + s->ePotential = 0.0; + int fSize = s->boxes->nTotalBoxes*MAXATOMS; + for (int ii=0; iiatoms->f[ii]); + s->atoms->U[ii] = 0.; + } + + real_t s6 = sigma*sigma*sigma*sigma*sigma*sigma; + + real_t rCut6 = s6 / (rCut2*rCut2*rCut2); + real_t eShift = POT_SHIFT * rCut6 * (rCut6 - 1.0); + + //virial stress added here + real_t localStress[9]; + for (int m=0; m<9; m++) + { + localStress[m] = 0.0; + } + + int nbrBoxes[27]; + // loop over local boxes + for (int iBox=0; iBoxboxes->nLocalBoxes; iBox++) + { + int nIBox = s->boxes->nAtoms[iBox]; + if ( nIBox == 0 ) continue; + int nNbrBoxes = getNeighborBoxes(s->boxes, iBox, nbrBoxes); + // loop over neighbors of iBox + for (int jTmp=0; jTmp=0); + + int nJBox = s->boxes->nAtoms[jBox]; + if ( nJBox == 0 ) continue; + + // calculate energy contribution based on whether + // the neighbor box is local or remote + real_t localScale; + if (jBox < s->boxes->nLocalBoxes) + localScale = 1.0; + else + localScale = 0.5; + + // loop over atoms in iBox + for (int iOff=iBox*MAXATOMS,ii=0; iiatoms->gid[iOff]; + // kinetic energy contribution to the virial stress + int iSpecies = s->atoms->iSpecies[iOff]; + real_t invMass = 1.0/s->species[iSpecies].mass; + for (int ii=0; ii<3; ii++) + { + for (int jj=0; jj<3; jj++) + { + int m = 3*ii + jj; + localStress[m] -= s->atoms->p[iOff][ii]*s->atoms->p[iOff][jj]*invMass; + } + } + // loop over atoms in jBox + for (int jOff=MAXATOMS*jBox,ij=0; ijatoms->gid[jOff]; + if (jBox < s->boxes->nLocalBoxes && jId <= iId ) + continue; // don't double count local-local pairs. + real_t r2 = 0.0; + for (int m=0; m<3; m++) + { + dr[m] = s->atoms->r[iOff][m]-s->atoms->r[jOff][m]; + r2+=dr[m]*dr[m]; + } + + if ( r2 > rCut2) continue; + + // Important note: + // from this point on r actually refers to 1.0/r + r2 = 1.0/r2; + real_t r6 = s6 * (r2*r2*r2); + real_t eLocal = r6 * (r6 - 1.0) - eShift; + s->atoms->U[iOff] += 0.5*eLocal; + s->atoms->U[jOff] += 0.5*eLocal; + + ePot += localScale * eLocal; + // different formulation to avoid sqrt computation + real_t fr = - 4.0*epsilon*r6*r2*(12.0*r6 - 6.0); + for (int m=0; m<3; m++) + { + s->atoms->f[iOff][m] -= dr[m]*fr; + s->atoms->f[jOff][m] += dr[m]*fr; + } + + // stress computation + for (int ii=0; ii<3; ii++) + { + for (int jj=0; jj<3; jj++) + { + int m = 3*ii + jj; + localStress[m] -= localScale*fr*dr[ii]*dr[jj]; + } + } + } // loop over atoms in jBox + } // loop over atoms in iBox + } // loop over neighbor boxes + } // loop over local boxes in system + + ePot = ePot*4.0*epsilon; + s->ePotential = ePot; + + // renormalize stress + for (int m=0; m<9; m++) + { + // divide by the undeformed volume + localStress[m] = localStress[m]/s->defInfo->globalVolume; + // normalize the volume accounting for the strain + // write to the global array + s->defInfo->stress[m] = localStress[m]/s->defInfo->strain[9]; + } + + return 0; +} diff --git a/comd-cl/src-cl/ljForce.h b/comd-cl/src-cl/ljForce.h new file mode 100644 index 0000000..4e8a30d --- /dev/null +++ b/comd-cl/src-cl/ljForce.h @@ -0,0 +1,31 @@ +/// \file +/// Computes forces for the 12-6 Lennard Jones (LJ) potential. + +#ifndef _LJTYPES_H_ +#define _LJTYPES_H_ + +#include "CoMDTypes.h" + +struct BasePotentialSt; +struct BasePotentialSt* initLjPot(void); + +/// Derived struct for a Lennard Jones potential. +/// Polymorphic with BasePotential. +/// \see BasePotential +typedef struct LjPotentialSt +{ + real_t cutoff; //!< potential cutoff distance in Angstroms + real_t mass; //!< mass of atoms in intenal units + real_t lat; //!< lattice spacing (angs) of unit cell + char latticeType[8]; //!< lattice type, e.g. FCC, BCC, etc. + char name[3]; //!< element name + int atomicNo; //!< atomic number + int (*force)(SimFlat* s); //!< function pointer to force routine + void (*print)(FILE* file, BasePotential* pot); + void (*destroy)(BasePotential** pot); //!< destruction of the potential + real_t sigma; + real_t epsilon; +} LjPotential; + +#endif + diff --git a/comd-cl/src-cl/lj_kernels.cl b/comd-cl/src-cl/lj_kernels.cl new file mode 100644 index 0000000..c1bc93f --- /dev/null +++ b/comd-cl/src-cl/lj_kernels.cl @@ -0,0 +1,384 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +//Initial implementation of the MD code + +/** + Since OpenCL doesn't pick up #include properly, we need to manually switch real_t from + float to double in each kernel file individually. + **/ + +#define UNROLL 1 +#define N_MAX_NEIGHBORS 27 +#define PERIODIC 1 + +// diagnostic flag to allow multiple levels of debug output (on CPU only) +#define KERN_DIAG 0 + +#define POT_SHIFT 1.0 + +#if defined(cl_khr_fp64) // Khronos extension available? +#pragma OPENCL EXTENSION cl_khr_fp64 : enable +#elif defined(cl_amd_fp64) // AMD extension available? +#pragma OPENCL EXTENSION cl_amd_fp64 : enable +#endif + +/* CL_REAL_T is set to single or double depending on compile time flags */ +typedef CL_REAL_T real_t; + +int binSearch(global int *boxes, int n, int nboxes, int tot_atoms) +{ + int l = 0, r = nboxes - 1, mid = 0, box = 0; + + while(l <= r) + { + mid = (l + r)/2; + + if(n >= boxes[mid-1] && n < boxes[mid]) + { + box = mid; + break; + } + else if(mid == (nboxes - 1) && n >= boxes[mid] && n < tot_atoms) + { + box = mid + 1; + break; + } + else if(boxes[mid] > n) + r = mid - 1; + else + l = mid + 1; + } + + return (box == 0) ? 0 : box - 1; +} + +// Simple version without local blocking to check for correctness +__kernel void ljForce( + __global const real_t* xPos, + __global const real_t* yPos, + __global const real_t* zPos, + __global real_t* fx, + __global real_t* fy, + __global real_t* fz, + __global real_t* U, + __global const int* neighborList, + __global const int* nNeighbors, + __global const int* nAtoms, + const real_t sigma, + const real_t epsilon, + const real_t cutoff, + const int boxSize, + global int *boxes) +{ + + // no loop unrolling + /* + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + int maxAtoms = get_global_size(0); + */ + + // loop unrolling + /* + int iLocal = get_global_id(0); + int iLine = get_global_id(1); + int lineLength = get_global_size(0); + + int maxAtoms = lineLength/UNROLL; + int iBox = iLine*UNROLL + iLocal/maxAtoms; + int iAtom = iLocal % maxAtoms; +*/ + + // prefix sum array to compute iBox + int tid = get_global_id(0); + int iBox = binSearch(boxes, tid, boxSize, get_global_size(0)); + + int iAtom = tid - boxes[iBox]; + + real_t rCut = cutoff; + real_t rCut2 = rCut*rCut; + real_t s6 = sigma*sigma*sigma*sigma*sigma*sigma; + + real_t rCut6 = s6 / (rCut2*rCut2*rCut2); + real_t eShift = POT_SHIFT * rCut6 * (rCut6 - 1.0); + + // zero out local force and energy accumulators + real_t fxItem = 0.0; + real_t fyItem = 0.0; + real_t fzItem = 0.0; + + real_t uItem = 0.0; + + int iOffset = iBox*64;//maxAtoms; //N_MAX_ATOMS; + int iParticle = iOffset + iAtom; + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + +#if(KERN_DIAG > 1) + printf("i = %d, %f, %f, %f\n", iParticle, xPos[iParticle], yPos[iParticle], zPos[iParticle]); +#endif + +#if(KERN_DIAG > 0) + printf("iBox = %d, nNeighbors = %d\n", iBox, nNeighbors[iBox]); +#endif + + for (int j = 0; j 1) + //printf("dx, dy, dz = %f, %f, %f\n", dx, dy, dz); + //printf("i = %d, j = %d, %f, %f, %f\n", iParticle, jParticle, xPos[jParticle], yPos[jParticle], zPos[jParticle]); +#endif + + real_t r2 = dx*dx + dy*dy + dz*dz; + + if ( r2 <= rCut2 && r2 > 0.0) + {// no divide by zero + +#if(KERN_DIAG > 1) + printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("r2, rCut = %f, %f\n", r2, rCut); +#endif + + // reciprocal of r2 now + r2 = (real_t)1.0/r2; + + real_t r6 = s6*r2*r2*r2; + + uItem += r6*(r6 - 1.0) - eShift; + +#if(KERN_DIAG > 1) + //printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("iParticle = %d, jParticle = %d, i_b = %d, r6 = %f\n", iParticle, jParticle, i_b, r6); +#endif + + real_t fr = - 4.0*epsilon*r2*r6*(12.0*r6 - 6.0); + + fxItem += dx*fr; + fyItem += dy*fr; + fzItem += dz*fr; + + } + else + { + } + + + } // loop over all atoms + } // loop over neighbor cells + + fx[iParticle] = fxItem; + fy[iParticle] = fyItem; + fz[iParticle] = fzItem; + + // since we loop over all particles, each particle contributes 1/2 the pair energy to the total + U[iParticle] = uItem*2.0*epsilon; + + } +} + +__kernel void ljForceLocal( + __global real_t* xPos, + __global real_t* yPos, + __global real_t* zPos, + __global real_t* fx, + __global real_t* fy, + __global real_t* fz, + __global real_t* U, + __global int* neighborList, + __global int* nNeighbors, + __global int* nAtoms, + __local real_t* x_ii, + __local real_t* y_ii, + __local real_t* z_ii, + __local real_t* x_ij, + __local real_t* y_ij, + __local real_t* z_ij, + const real_t sigma, + const real_t epsilon, + const real_t cutoff) +{ + + + + + real_t dx, dy, dz; + real_t r2, r6; + real_t fr; + real_t dxbox, dybox, dzbox; + + real_t rCut = 5.0*sigma; + real_t rCut2 = rCut*rCut; + real_t s6 = sigma*sigma*sigma*sigma*sigma*sigma; + + int i_p; + + int iOffset, jOffset; + int jBox; + int iParticle, jParticle; + + // zero out forces, energy on particles + real_t fx_ii = 0.0; + real_t fy_ii = 0.0; + real_t fz_ii = 0.0; + + real_t u_ii = 0.0; + + int iBox = get_global_id(1); + int iLocal = get_local_id(0); + int maxAtoms = get_global_size(0); + int nGroups = get_num_groups(0); + int nItems = get_local_size(0); + int groupId = get_group_id(0); + + int group_offset = nItems*groupId; + int iAtom = group_offset + iLocal; + iOffset = iBox*maxAtoms; //N_MAX_ATOMS; + iParticle = iOffset + iAtom; + +#if(KERN_DIAG) + printf("Number of work groups: %d\n", nGroups); + printf("Number of work items: %d\n", nItems); +#endif + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + +#if(KERN_DIAG) + //printf("iParticle = %d\n", iParticle); + //printf("i_global = %d, iLocal = %d, i_b = %d, nItems = %d\n", i_global, iLocal, i_b, nItems); +#endif + + // load particle data into local arrays + x_ii[iLocal] = xPos[iParticle]; + y_ii[iLocal] = yPos[iParticle]; + z_ii[iLocal] = zPos[iParticle]; + + barrier(CLK_LOCAL_MEM_FENCE); + +#if(KERN_DIAG) + //printf("x_ii, y_ii, z_ii = %f, %f, %f\n", x_ii[iLocal], y_ii[iLocal], z_ii[iLocal]); + printf("%d, %f, %f, %f\n", iParticle, x_ii[iLocal], y_ii[iLocal], z_ii[iLocal]); +#endif + + for (int j = 0; j 0.0) + {// no divide by zero + + // reciprocal of r2 now + r2 = (real_t)1.0/r2; + + r6 = s6*r2*r2*r2; + + u_ii += r6*(r6 - 1.0); + +#if(KERN_DIAG) + //printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("iParticle = %d, jParticle = %d, i_b = %d, r6 = %f\n", iParticle, jParticle, i_b, r6); +#endif + + fr = 4.0*epsilon*s6*r2*r6*(12.0*r6*s6 - 6.0); + + fx_ii += dx*fr; + fy_ii += dy*fr; + fz_ii += dz*fr; + + } + else + { + } + + } // loop over all atoms in group + + } // loop over all groups in neighbor cell + } // loop over neighbor cells + + fx[iParticle] = fx_ii; + fy[iParticle] = fy_ii; + fz[iParticle] = fz_ii; + + + // since we loop over all particles, each particle contributes 1/2 the pair energy to the total + U[iParticle] = u_ii*2.0*epsilon*s6; + + barrier(CLK_LOCAL_MEM_FENCE); + } + +} + diff --git a/comd-cl/src-cl/lj_kernels_aos.cl b/comd-cl/src-cl/lj_kernels_aos.cl new file mode 100644 index 0000000..fce64c4 --- /dev/null +++ b/comd-cl/src-cl/lj_kernels_aos.cl @@ -0,0 +1,452 @@ +//Initial implementation of the MD code + +/** + Since OpenCL doesn't pick up #include properly, we need to manually switch real_t from + float to double in each kernel file individually. +**/ + +#define N_MAX_NEIGHBORS 27 +#define PERIODIC 1 + +#define KERN_DIAG 0 + +#if defined(cl_khr_fp64) // Khronos extension available? +#pragma OPENCL EXTENSION cl_khr_fp64 : enable +#elif defined(cl_amd_fp64) // AMD extension available? +#pragma OPENCL EXTENSION cl_amd_fp64 : enable +#endif + +/* CL_REAL_T is set to single or double depending on compile time flags */ +typedef CL_REAL_T real_t; +typedef CL_REAL4_T cl_real4; + +// Simple version without local blocking to check for correctness +__kernel void ljForce( + __global real_t* xPos, + __global real_t* yPos, + __global real_t* zPos, + __global real_t* fx, + __global real_t* fy, + __global real_t* fz, + __global real_t* energy, + __global real_t* dcx, + __global real_t* dcy, + __global real_t* dcz, + __global real_t* bounds, + __global int* neighborList, + __global int* nNeighbors, + __global int* nAtoms, + const real_t sigma, + const real_t epsilon, + const real_t cutoff) +{ + + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + int maxAtoms = get_global_size(0); + + real_t dx, dy, dz; + real_t r, r2, r6; + real_t fr, e; + + real_t dxbox, dybox, dzbox; + + // accumulate local force value + real_t fxItem, fyItem, fzItem; + + real_t rCut = cutoff; + real_t rCut2 = rCut*rCut; + real_t s6 = sigma*sigma*sigma*sigma*sigma*sigma; + + // zero out forces on particles + fxItem = 0.0; + fyItem = 0.0; + fzItem = 0.0; + + e = 0.0; + + int iOffset = iBox*maxAtoms; //N_MAX_ATOMS; + int iParticle = iOffset + iAtom; + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + +#if(KERN_DIAG) + //if (iBox < 2) printf("i = %d, %f, %f, %f\n", iParticle, xPos[iParticle], yPos[iParticle], zPos[iParticle]); + + //printf("iBox = %d, nNeighbors = %d\n", iBox, nNeighbors[iBox]); +#endif + + for (int j = 0; j 0.5*bounds[0] ) dxbox -= bounds[0]; + if (dybox<-0.5*bounds[1]) dybox += bounds[1]; + else if (dybox > 0.5*bounds[1] ) dybox -= bounds[1]; + if (dzbox<-0.5*bounds[2]) dzbox += bounds[2]; + else if (dzbox > 0.5*bounds[2] ) dzbox -= bounds[2]; + } + + // printf("dxbox, dybox, dzbox = %f, %f, %f\n", dxbox, dybox, dzbox); + + for (int jAtom = 0; jAtom 0.0) + {// no divide by zero + +#if(KERN_DIAG) + printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("r2, rCut = %f, %f\n", r2, rCut); +#endif + + // reciprocal of r2 now + r2 = (real_t)1.0/r2; + + r6 = r2*r2*r2; + + e += r6*(s6*r6 - 1.0); + +#if(KERN_DIAG) + //printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("iParticle = %d, jParticle = %d, i_b = %d, r6 = %f\n", iParticle, jParticle, i_b, r6); +#endif + + fr = -4.0*epsilon*s6*r2*r6*(12.0*r6*s6 - 6.0); + + fxItem += dx*fr; + fyItem += dy*fr; + fzItem += dz*fr; + + } else { + } + + + } // loop over all atoms + } // loop over neighbor cells + + fx[iParticle] = fxItem; + fy[iParticle] = fyItem; + fz[iParticle] = fzItem; + + // since we loop over all particles, each particle contributes 1/2 the pair energy to the total + energy[iParticle] = e*2.0*epsilon*s6; + + } +} + + +__kernel void ljForceAos( + __global cl_real4* pos, + __global cl_real4* f, + __global real_t* energy, + __global cl_real4* dc, + __global cl_real4* bounds, + __global int* neighborList, + __global int* nNeighbors, + __global int* nAtoms, + const real_t sigma, + const real_t epsilon, + const real_t cutoff) +{ + + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + int maxAtoms = get_global_size(0); + + cl_real4 dr; + real_t r, r2, r6; + real_t fr, e; + + cl_real4 drBox; + + // accumulate local force value + cl_real4 fItem; + + real_t rCut = cutoff; + real_t rCut2 = rCut*rCut; + real_t s6 = sigma*sigma*sigma*sigma*sigma*sigma; + + int j, j_local; + int jBox, jAtom; + + int iOffset, jOffset; + int iParticle, jParticle; + + // zero out forces on particles + fItem.x = 0.0; + fItem.y = 0.0; + fItem.z = 0.0; + + e = 0.0; + + iOffset = iBox*maxAtoms; //N_MAX_ATOMS; + iParticle = iOffset + iAtom; + + if (iAtom < nAtoms[iBox]) + {// each thread executes on a single atom in the box + +#if(KERN_DIAG) + //if (iBox < 2) printf("i = %d, %e, %e, %e\n", iParticle, pos[iParticle].x, pos[iParticle].y, pos[iParticle].z); + + //printf("iBox = %d, nNeighbors = %d\n", iBox, nNeighbors[iBox]); + //printf("iBox = %d, nAtoms = %d\n", iBox, nAtoms[iBox]); +#endif + + for (j = 0; j 0.5*bounds[0].x ) drBox.x -= bounds[0].x; + if (drBox.y<-0.5*bounds[0].y) drBox.y += bounds[0].y; + else if (drBox.y > 0.5*bounds[0].y ) drBox.y -= bounds[0].y; + if (drBox.z<-0.5*bounds[0].z) drBox.z += bounds[0].z; + else if (drBox.z > 0.5*bounds[0].z ) drBox.z -= bounds[0].z; + } + + // printf("dxbox, dybox, dzbox = %f, %f, %f\n", drBox.x, drBox.y, drBox.z); + + for (jAtom = 0; jAtom 0.0) + {// no divide by zero + +#if(KERN_DIAG) + //printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("r2, rCut = %f, %f\n", r2, rCut); +#endif + + // reciprocal of r2 now + r2 = (real_t)1.0/r2; + + r6 = r2*r2*r2; + + e += r6*(s6*r6 - 1.0); + +#if(KERN_DIAG) + //printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("iParticle = %d, jParticle = %d, i_b = %d, r6 = %f\n", iParticle, jParticle, i_b, r6); +#endif + + fr = -4.0*epsilon*s6*r2*r6*(12.0*r6*s6 - 6.0); + + fItem.x += dr.x*fr; + fItem.y += dr.y*fr; + fItem.z += dr.z*fr; + + } else { + } + + + } // loop over all atoms + } // loop over neighbor cells + + f[iParticle] = fItem; + + // since we loop over all particles, each particle contributes 1/2 the pair energy to the total + energy[iParticle] = e*2.0*epsilon*s6; + + } +} + +/* + __kernel void ljForce( + __global real_t* xPos, + __global real_t* yPos, + __global real_t* zPos, + __global real_t* fx, + __global real_t* fy, + __global real_t* fz, + __global real_t* energy, + __global int* neighborList, + __global int* nNeighbors, + __local real_t* x_ii, + __local real_t* y_ii, + __local real_t* z_ii, + __local real_t* x_ij, + __local real_t* y_ij, + __local real_t* z_ij, + const real_t sigma, + const real_t epsilon, + const int nCells) + { + + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + int iLocal = get_local_id(0); + int n_groups = get_num_groups(0); + int n_items = get_local_size(0); + + + +#if(KERN_DIAG) +printf("Number of work groups: %d\n", n_groups); +printf("Number of work items: %d\n", n_items); +#endif + +real_t dx, dy, dz; +real_t r, r2, r6; +real_t fr, e; +real_t fx_ii, fy_ii, fz_ii; + +real_t rCut = 5.0*sigma; +real_t rCut2 = rCut*rCut; +real_t s6 = sigma*sigma*sigma*sigma*sigma*sigma; + +int j, j_local; +int i_b, i_p; +int j_b; + +int cell_offset, jOffset; +int group_offset; +int iParticle, jParticle; + +// zero out forces on particles +fx_ii = 0.0; +fy_ii = 0.0; +fz_ii = 0.0; + +e = 0.0; + +i_b = get_group_id(0); + +cell_offset = iBox*N_MAX_ATOMS; +group_offset = n_items*i_b; +iParticle = group_offset + iLocal; + +#if(KERN_DIAG) +//printf("iParticle = %d\n", iParticle); +//printf("i_global = %d, iLocal = %d, i_b = %d, n_items = %d\n", i_global, iLocal, i_b, n_items); +#endif + +// load particle data into local arrays +x_ii[iLocal] = xPos[iParticle + cell_offset]; +y_ii[iLocal] = yPos[iParticle + cell_offset]; +z_ii[iLocal] = zPos[iParticle + cell_offset]; + +barrier(CLK_LOCAL_MEM_FENCE); + +#if(KERN_DIAG) +//printf("x_ii, y_ii, z_ii = %f, %f, %f\n", x_ii[iLocal], y_ii[iLocal], z_ii[iLocal]); +printf("%d, %f, %f, %f\n", iParticle, x_ii[iLocal], y_ii[iLocal], z_ii[iLocal]); +#endif + +for (j = 0; j 0.0) + {// no divide by zero + + // reciprocal of r2 now + r2 = (real_t)1.0/r2; + + r6 = r2*r2*r2; + + e += r6*(s6*r6 - 1.0); + +#if(KERN_DIAG) + //printf("%d, %d, %f\n", iParticle, jParticle, r2); + //printf("iParticle = %d, jParticle = %d, i_b = %d, r6 = %f\n", iParticle, jParticle, i_b, r6); +#endif + + fr = 4.0*epsilon*s6*r2*r6*(12.0*r6*s6 - 6.0); + + fx_ii += dx*fr; + fy_ii += dy*fr; + fz_ii += dz*fr; + + } else { + } + + } // loop over all atoms in group + + } // loop over all groups in neighbor cell +} // loop over neighbor cells + +fx[iParticle + cell_offset] = fx_ii; +fy[iParticle + cell_offset] = fy_ii; +fz[iParticle + cell_offset] = fz_ii; + +barrier(CLK_LOCAL_MEM_FENCE); + +// since we loop over all particles, each particle contributes 1/2 the pair energy to the total +energy[iParticle + cell_offset] = e*2.0*epsilon*s6; + +} +*/ diff --git a/comd-cl/src-cl/memUtils.h b/comd-cl/src-cl/memUtils.h new file mode 100644 index 0000000..a732b77 --- /dev/null +++ b/comd-cl/src-cl/memUtils.h @@ -0,0 +1,30 @@ +/// \file +/// Wrappers for memory allocation. + +#ifndef _MEMUTILS_H_ +#define _MEMUTILS_H_ + +#include + +#define freeMe(s,element) {if(s->element) comdFree(s->element); s->element = NULL;} + +static void* comdMalloc(size_t iSize) +{ + return malloc(iSize); +} + +static void* comdCalloc(size_t num, size_t iSize) +{ + return calloc(num, iSize); +} + +static void* comdRealloc(void* ptr, size_t iSize) +{ + return realloc(ptr, iSize); +} + +static void comdFree(void *ptr) +{ + free(ptr); +} +#endif diff --git a/comd-cl/src-cl/mycommand.c b/comd-cl/src-cl/mycommand.c new file mode 100644 index 0000000..adab891 --- /dev/null +++ b/comd-cl/src-cl/mycommand.c @@ -0,0 +1,288 @@ +/// \file +/// Handle command line arguments. + +#include "mycommand.h" + +#include +#include + +#include "cmdLineParser.h" +#include "parallel.h" +#include "mytype.h" + +/// \page pg_running_comd Running CoMD +/// +/// \section sec_command_line_options Command Line Options +/// +/// CoMD accepts a number of command line options to set the parameters +/// of the simulation. Every option has both a long form and a short +/// form. The long and short form of the arguments are entirely +/// interchangeable and may be mixed. All the arguments are independent +/// with the exception of the \--potDir, \--potName, and \--potType, +/// (short forms -d, -n, and -t) arguments which are only relevant when +/// used in conjunction with \--doeam, (-e). +/// +/// Supported options are: +/// +/// | Long Form | Short Form | Default Value | Description +/// | :------------ | :---------: | :-----------: | :---------- +/// | \--help | -h | N/A | print this message +/// | \--potDir | -d | pots | potential directory +/// | \--potName | -p | Cu_u6.eam | potential name +/// | \--potType | -t | funcfl | potential type (funcfl or setfl) +/// | \--doeam | -e | N/A | compute eam potentials (default is LJ) +/// | \--nx | -x | 20 | number of unit cells in x +/// | \--ny | -y | 20 | number of unit cells in y +/// | \--nz | -z | 20 | number of unit cells in z +/// | \--xproc | -i | 1 | number of ranks in x direction +/// | \--yproc | -j | 1 | number of ranks in y direction +/// | \--zproc | -k | 1 | number of ranks in z direction +/// | \--nSteps | -N | 100 | total number of time steps +/// | \--printRate | -n | 10 | number of steps between output +/// | \--dt | -D | 1 | time step (in fs) +/// | \--lat | -l | -1 | lattice parameter (Angstroms) +/// | \--temp | -T | 600 | initial temperature (K) +/// | \--delta | -r | 0 | initial delta (Angstroms) +/// | \--defGrad | -s | 1.0 | 1D deformation gradient +/// +/// Notes: +/// +/// The negative value for the lattice parameter (such as the default +/// value, -1) is interpreted as a flag to indicate that the lattice +/// parameter should be set from the potential. All supplied potentials +/// are for copper and have a lattice constant of 3.615 +/// Angstroms. Setting the lattice parameter to any positive value will +/// override the values provided in the potential files. +/// +/// The default potential name for the funcfl potential type is +/// Cu_u6.eam (Adams potential). For the setfl type the default +/// potential name is Cu01.eam.alloy (Mishin potential). Although these +/// will yield similar dynamics, the table have a very different number +/// of entries (500 vs. 10,000 points, respectively) This may give very +/// different performance, depending on the hardware. +/// +/// The default temperature is 600K. However, when using a perfect +/// lattice the system will rapidly cool to 300K due to equipartition of +/// energy. +/// +/// +/// \subsection ssec_example_command_lines Examples +/// +/// ------------------------------ +/// +/// The canonical base simulation, is +/// +/// $ ./CoMDParallel +/// +/// Or, equivalently if the code was built with MPI: +/// +/// $ mpirun -np 1 ./CoMDParallel +/// +/// ------------------------------ +/// +/// \subsubsection cmd_examples_potential Changing Potentials +/// +/// To run with the default (Adams) EAM potential, specify -e: +/// +/// $ ./CoMDParallel -e +/// +/// ------------------------------ +/// +/// To run using the Mishin EAM potential contained in the setfl file +/// Cu01.eam.alloy. This potential uses much larger tables (10,000 +/// entries vs. 500 for the Adams potential). +/// +/// $ ./CoMDParallel -e -t setfl +/// +/// ------------------------------ +/// +/// Selecting the name of a setfl file without setting the appropriate +/// potential type +/// +/// $ ./CoMDParallel -e -p Cu01.eam.alloy +/// +/// will result in an error message: +/// +/// Only FCC Lattice type supported, not . Fatal Error. +/// +/// Instead use: +/// +/// $ ./CoMDParallel -e -t setfl -p Cu01.eam.alloy +/// +/// ------------------------------ +/// +/// \subsubsection cmd_example_struct Initial Structure Modifications +/// +/// To change the lattice constant and run with an expanded or +/// compressed lattice: +/// +/// $ ./CoMDParallel -l 3.5 +/// +/// This can be useful to test that the potential is being correctly +/// evaluated as a function of interatomic spacing (the cold +/// curve). However, due to the high degree of symmetry of a perfect +/// lattice, this type of test is unlikely to detect errors in the force +/// computation. +/// +/// ------------------------------ +/// +/// Initialize with zero temperature (zero instantaneous particle +/// velocity) but with a random displacements of the atoms (in this +/// case the maximum displacement is 0.1 Angstrom along each axis). +/// +/// $ ./CoMDParallel --delta 0.1 -T 0 +/// +/// Typical values of delta are in the range of 0.1 to 0.5 Angstroms. +/// Larger values of delta correspond to higher initial potential energy +/// which in turn produce higer temperatures as the structure +/// equilibrates. +/// +/// ------------------------------ +/// +/// +/// \subsubsection cmd_examples_scaling Scaling Examples +/// +/// Run the default global simulation size (32,000 atoms) distributed +/// over 8 cubic subdomains, an example of strong scaling. If the +/// number of processors does not equal (i*j*k) the run will abort. +/// Notice that spaces are optional between short form options and their +/// arguments. +/// +/// $ mpirun -np 8 ./CoMDParallel -i2 -j2 -k2 +/// +/// ------------------------------ +/// +/// Run a weak scaling example: the simulation is doubled in each +/// dimension from the default 20 x 20 x 20 and the number of subdomains +/// in each direction is also doubled. +/// +/// $ mpirun -np 8 ./CoMDParallel -i2 -j2 -k2 -x 40 -y 40 -z 40 +/// +/// ------------------------------ +/// +/// The same weak scaling run, but for 10,000 timesteps, with output +/// only every 100 steps. +/// +/// $ mpirun -np 8 ./CoMDParallel -i2 -j2 -k2 -x 40 -y 40 -z 40 -N 10000 -n 100 +/// + + +/// \details Initialize a Command structure with default values, then +/// parse any command line arguments that were supplied to overwrite +/// defaults. +/// +/// \param [in] argc the number of command line arguments +/// \param [in] argv the command line arguments array +Command parseCommandLine(int argc, char** argv) +{ + Command cmd; + + memset(cmd.potDir, 0, 1024); + memset(cmd.potName, 0, 1024); + memset(cmd.potType, 0, 1024); + strcpy(cmd.potDir, "pots"); + strcpy(cmd.potName, "\0"); // default depends on potType + strcpy(cmd.potType, "funcfl"); + cmd.doeam = 0; + cmd.nx = 20; + cmd.ny = 20; + cmd.nz = 20; + cmd.xproc = 1; + cmd.yproc = 1; + cmd.zproc = 1; + cmd.nSteps = 100; + cmd.printRate = 10; + cmd.dt = 1.0; + cmd.lat = -1.0; + cmd.temperature = 600.0; + cmd.initialDelta = 0.0; + cmd.defGrad = 1.0; + cmd.useGpu = 0; + + int help=0; + // add arguments for processing. Please update the html documentation too! + addArg("help", 'h', 0, 'i', &(help), 0, "print this message"); + addArg("potDir", 'd', 1, 's', cmd.potDir, sizeof(cmd.potDir), "potential directory"); + addArg("potName", 'p', 1, 's', cmd.potName, sizeof(cmd.potName), "potential name"); + addArg("potType", 't', 1, 's', cmd.potType, sizeof(cmd.potType), "potential type (funcfl or setfl)"); + addArg("doeam", 'e', 0, 'i', &(cmd.doeam), 0, "compute eam potentials"); + addArg("nx", 'x', 1, 'i', &(cmd.nx), 0, "number of unit cells in x"); + addArg("ny", 'y', 1, 'i', &(cmd.ny), 0, "number of unit cells in y"); + addArg("nz", 'z', 1, 'i', &(cmd.nz), 0, "number of unit cells in z"); + addArg("xproc", 'i', 1, 'i', &(cmd.xproc), 0, "processors in x direction"); + addArg("yproc", 'j', 1, 'i', &(cmd.yproc), 0, "processors in y direction"); + addArg("zproc", 'k', 1, 'i', &(cmd.zproc), 0, "processors in z direction"); + addArg("nSteps", 'N', 1, 'i', &(cmd.nSteps), 0, "number of time steps"); + addArg("printRate", 'n', 1, 'i', &(cmd.printRate), 0, "number of steps between output"); + addArg("dt", 'D', 1, 'd', &(cmd.dt), 0, "time step (in fs)"); + addArg("lat", 'l', 1, 'd', &(cmd.lat), 0, "lattice parameter (Angstroms)"); + addArg("temp", 'T', 1, 'd', &(cmd.temperature), 0, "initial temperature (K)"); + addArg("delta", 'r', 1, 'd', &(cmd.initialDelta), 0, "initial delta (Angstroms)"); + addArg("defGrad", 's', 1, 'd', &(cmd.defGrad), 0, "1D deformation gradient"); + addArg("useGpu", 'g', 0, 'i', &(cmd.useGpu), 0, "use GPU for computation"); + + processArgs(argc,argv); + + // If user didn't set potName, set type dependent default. + if (strlen(cmd.potName) == 0) + { + if (strcmp(cmd.potType, "setfl" ) == 0) + strcpy(cmd.potName, "Cu01.eam.alloy"); + if (strcmp(cmd.potType, "funcfl") == 0) + strcpy(cmd.potName, "Cu_u6.eam"); + } + + if (help) + { + printArgs(); + freeArgs(); + exit(2); + } + freeArgs(); + + return cmd; +} + +void printCmdYaml(FILE* file, Command* cmd) +{ + if (!PRINT_YAML || !printRank()) + return; + fprintf(file, + "Command Line Parameters:\n" + " doeam: %d\n" + " potDir: %s\n" + " potName: %s\n" + " potType: %s\n" + " nx: %d\n" + " ny: %d\n" + " nz: %d\n" + " xproc: %d\n" + " yproc: %d\n" + " zproc: %d\n" + " Lattice constant: %g Angstroms\n" + " nSteps: %d\n" + " printRate: %d\n" + " Time step: %g fs\n" + " Initial Temperature: %g K\n" + " Initial Delta: %g Angstroms\n" + " Deformation gradient: %g\n" + " GPU requested: %d\n" + "\n", + cmd->doeam, + cmd->potDir, + cmd->potName, + cmd->potType, + cmd->nx, cmd->ny, cmd->nz, + cmd->xproc, cmd->yproc, cmd->zproc, + cmd->lat, + cmd->nSteps, + cmd->printRate, + cmd->dt, + cmd->temperature, + cmd->initialDelta, + cmd->defGrad, + cmd->useGpu + ); + fflush(file); +} + diff --git a/comd-cl/src-cl/mycommand.h b/comd-cl/src-cl/mycommand.h new file mode 100644 index 0000000..a26532e --- /dev/null +++ b/comd-cl/src-cl/mycommand.h @@ -0,0 +1,39 @@ +/// \file +/// Handle command line arguments. + +#ifndef MYCOMMAND_H +#define MYCOMMAND_H + +#include + +/// A structure to hold the value of every run-time parameter that can +/// be read from the command line. +typedef struct CommandSt +{ + char potDir[1024]; //!< the directory where EAM potentials reside + char potName[1024]; //!< the name of the potential + char potType[1024]; //!< the type of the potential (funcfl or setfl) + int doeam; //!< a flag to determine whether we're running EAM potentials + int nx; //!< number of unit cells in x + int ny; //!< number of unit cells in y + int nz; //!< number of unit cells in z + int xproc; //!< number of processors in x direction + int yproc; //!< number of processors in y direction + int zproc; //!< number of processors in z direction + int nSteps; //!< number of time steps to run + int printRate; //!< number of steps between output + int useGpu; //!< use GPU for compute + double dt; //!< time step (in femtoseconds) + double lat; //!< lattice constant (in Angstroms) + double temperature; //!< simulation initial temperature (in Kelvin) + double initialDelta;//!< magnitude of initial displacement from lattice (in Angstroms) + double defGrad; //!< deformation gradient == 1,1 component of the strain tensor +} Command; + +/// Process command line arguments into an easy to handle structure. +Command parseCommandLine(int argc, char** argv); + +/// Print run parameters in yaml format on the supplied output stream. +void printCmdYaml(FILE* file, Command* cmd); + +#endif diff --git a/comd-cl/src-cl/mytype.h b/comd-cl/src-cl/mytype.h new file mode 100644 index 0000000..d97f81b --- /dev/null +++ b/comd-cl/src-cl/mytype.h @@ -0,0 +1,32 @@ +/// \file +/// Frequently needed typedefs. + +#ifndef __MYTYPE_H_ +#define __MYTYPE_H_ + +/// \def SINGLE determines whether single or double precision is built +#ifdef SINGLE +typedef float real_t; //!< define native type for CoMD as single precision + #define FMT1 "%g" //!< /def format argument for floats + #define EMT1 "%e" //!< /def format argument for eng floats +#else +typedef double real_t; //!< define native type for CoMD as double precision + #define FMT1 "%lg" //!< \def format argument for doubles + #define EMT1 "%le" //!< \def format argument for eng doubles +#endif + +typedef real_t real3[3]; //!< a convenience vector with three real_t + +static void zeroReal3(real3 a) +{ + a[0] = 0.0; + a[1] = 0.0; + a[2] = 0.0; +} + +#define screenOut stdout + +// KBARROS: ONLY PRINT YAML FILES IF TRUE +#define PRINT_YAML 1 + +#endif diff --git a/comd-cl/src-cl/parallel.c b/comd-cl/src-cl/parallel.c new file mode 100644 index 0000000..63f9f77 --- /dev/null +++ b/comd-cl/src-cl/parallel.c @@ -0,0 +1,197 @@ +/// \file +/// Wrappers for MPI functions. This should be the only compilation +/// unit in the code that directly calls MPI functions. To build a pure +/// serial version of the code with no MPI, do not define DO_MPI. If +/// DO_MPI is not defined then all MPI functionality is replaced with +/// equivalent single task behavior. + +#include "parallel.h" + +#ifdef DO_MPI +#include +#endif + +#include +#include +#include +#include + +static int myRank = 0; +static int nRanks = 1; + +#ifdef DO_MPI +#ifdef SINGLE +#define REAL_MPI_TYPE MPI_FLOAT +#else +#define REAL_MPI_TYPE MPI_DOUBLE +#endif + +#endif + +int getNRanks() +{ + return nRanks; +} + +int getMyRank() +{ + return myRank; +} + +/// \details +/// For now this is just a check for rank 0 but in principle it could be +/// more complex. It is also possible to suppress practically all +/// output by causing this function to return 0 for all ranks. +int printRank() +{ + if (myRank == 0) return 1; + return 0; +} + +void timestampBarrier(const char* msg) +{ + barrierParallel(); + if (! printRank()) + return; + time_t t= time(NULL); + char* timeString = ctime(&t); + timeString[24] = '\0'; // clobber newline + fprintf(screenOut, "%s: %s\n", timeString, msg); + fflush(screenOut); +} + +void initParallel(int* argc, char*** argv) +{ +#ifdef DO_MPI + MPI_Init(argc, argv); + MPI_Comm_rank(MPI_COMM_WORLD, &myRank); + MPI_Comm_size(MPI_COMM_WORLD, &nRanks); +#endif +} + +void destroyParallel() +{ +#ifdef DO_MPI + MPI_Finalize(); +#endif +} + +void barrierParallel() +{ +#ifdef DO_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif +} + +/// \param [in] sendBuf Data to send. +/// \param [in] sendLen Number of bytes to send. +/// \param [in] dest Rank in MPI_COMM_WORLD where data will be sent. +/// \param [out] recvBuf Received data. +/// \param [in] recvLen Maximum number of bytes to receive. +/// \param [in] source Rank in MPI_COMM_WORLD from which to receive. +/// \return Number of bytes received. +int sendReceiveParallel(void* sendBuf, int sendLen, int dest, + void* recvBuf, int recvLen, int source) +{ +#ifdef DO_MPI + int bytesReceived; + MPI_Status status; + MPI_Sendrecv(sendBuf, sendLen, MPI_BYTE, dest, 0, + recvBuf, recvLen, MPI_BYTE, source, 0, + MPI_COMM_WORLD, &status); + MPI_Get_count(&status, MPI_BYTE, &bytesReceived); + + return bytesReceived; +#else + assert(source == dest); + memcpy(recvBuf, sendBuf, sendLen); + + return sendLen; +#endif +} + +void addIntParallel(int* sendBuf, int* recvBuf, int count) +{ +#ifdef DO_MPI + MPI_Allreduce(sendBuf, recvBuf, count, MPI_INT, MPI_SUM, MPI_COMM_WORLD); +#else + for (int ii=0; ii +#include +#include +#include +#include +#include + +#include "performanceTimers.h" +#include "mytype.h" +#include "parallel.h" +#include "yamlOutput.h" + +static uint64_t getTime(void); +static double getTick(void); +static void timerStats(void); + +/// You must add timer name in same order as enum in .h file. +/// Leading spaces can be specified to show a hierarchy of timers. +char* timerName[numberOfTimers] = { + "total", + "loop", + "timestep", + " position", + " velocity", + " redistribute", + " atomHalo", + " force", + " eamHalo", + "commHalo", + "commReduce", + "oclLoop", + "oclTimestep", + " oclPosition", + " oclVelocity", + " oclForce", + " oclRedist", + " oclCopy" +}; + +/// Timer data collected. Also facilitates computing averages and +/// statistics. +typedef struct TimersSt +{ + uint64_t start; //!< call start time + uint64_t total; //!< current total time + uint64_t count; //!< current call count + uint64_t elapsed; //!< lap time + + int minRank; //!< rank with min value + int maxRank; //!< rank with max value + + double minValue; //!< min over ranks + double maxValue; //!< max over ranks + double average; //!< average over ranks + double stdev; //!< stdev across ranks +} Timers; + +static Timers perfTimer[numberOfTimers]; + +void profileStart(const enum TimerHandle handle) +{ + perfTimer[handle].start = getTime(); +} + +void profileStop(const enum TimerHandle handle) +{ + perfTimer[handle].count += 1; + uint64_t delta = getTime() - perfTimer[handle].start; + perfTimer[handle].total += delta; + perfTimer[handle].elapsed += delta; +} + +/// \details +/// Return elapsed time (in seconds) since last call with this handle +/// and clear for next lap. +double getElapsedTime(const enum TimerHandle handle) +{ + double etime = getTick() * (double)perfTimer[handle].elapsed; + perfTimer[handle].elapsed = 0; + + return etime; +} + +/// \details +/// The report contains two blocks. The upper block is performance +/// information for the printRank. The lower block is statistical +/// information over all ranks. +void printPerformanceResults(int nGlobalAtoms) +{ + // Collect timer statistics overall and across ranks + timerStats(); + + if (!printRank()) + return; + + // only print timers with non-zero values. + double tick = getTick(); + double loopTime = perfTimer[loopTimer].total*tick; + + fprintf(screenOut, "\n\nTimings for Rank %d\n", getMyRank()); + fprintf(screenOut, " Timer # Calls Avg/Call (s) Total (s) %% Loop\n"); + fprintf(screenOut, "___________________________________________________________________\n"); + for (int ii=0; ii 0) + fprintf(screenOut, "%-16s%12"PRIu64" %8.4f %8.4f %8.2f\n", + timerName[ii], + perfTimer[ii].count, + totalTime/(double)perfTimer[ii].count, + totalTime, + totalTime/loopTime*100.0); + } + + fprintf(screenOut, "\nTiming Statistics Across %d Ranks:\n", getNRanks()); + fprintf(screenOut, " Timer Rank: Min(s) Rank: Max(s) Avg(s) Stdev(s)\n"); + fprintf(screenOut, "_____________________________________________________________________________\n"); + + for (int ii = 0; ii < numberOfTimers; ++ii) + { + if (perfTimer[ii].count > 0) + fprintf(screenOut, "%-16s%6d:%10.4f %6d:%10.4f %10.4f %10.4f\n", + timerName[ii], + perfTimer[ii].minRank, perfTimer[ii].minValue*tick, + perfTimer[ii].maxRank, perfTimer[ii].maxValue*tick, + perfTimer[ii].average*tick, perfTimer[ii].stdev*tick); + } + real_t atomsPerTask = nGlobalAtoms/(real_t)getNRanks(); + real_t atomRate = perfTimer[computeForceTimer].average * tick * 1e6 / + (atomsPerTask * perfTimer[computeForceTimer].count); + fprintf(screenOut, "\n---------------------------------------------------\n"); + fprintf(screenOut, " Average atom update rate: %6.2f us/atom/task\n", atomRate); + fprintf(screenOut, "---------------------------------------------------\n\n"); +} + +void printPerformanceResultsYaml(FILE* file) +{ + if (!PRINT_YAML || !printRank()) + return; + + double tick = getTick(); + double loopTime = perfTimer[loopTimer].total*tick; + + fprintf(file,"\nPerformance Results:\n"); + fprintf(file, " TotalRanks: %d\n", getNRanks()); + fprintf(file, " ReportingTimeUnits: seconds\n"); + fprintf(file, "Performance Results For Rank %d:\n", getMyRank()); + for (int ii = 0; ii < numberOfTimers; ii++) + { + if (perfTimer[ii].count > 0) + { + double totalTime = perfTimer[ii].total*tick; + fprintf(file, " Timer: %s\n", timerName[ii]); + fprintf(file, " CallCount: %"PRIu64"\n", perfTimer[ii].count); + fprintf(file, " AvgPerCall: %8.4f\n", totalTime/(double)perfTimer[ii].count); + fprintf(file, " Total: %8.4f\n", totalTime); + fprintf(file, " PercentLoop: %8.2f\n", totalTime/loopTime*100); + } + } + + fprintf(file, "Performance Results Across Ranks:\n"); + for (int ii = 0; ii < numberOfTimers; ii++) + { + if (perfTimer[ii].count > 0) + { + fprintf(file, " Timer: %s\n", timerName[ii]); + fprintf(file, " MinRank: %d\n", perfTimer[ii].minRank); + fprintf(file, " MinTime: %8.4f\n", perfTimer[ii].minValue*tick); + fprintf(file, " MaxRank: %d\n", perfTimer[ii].maxRank); + fprintf(file, " MaxTime: %8.4f\n", perfTimer[ii].maxValue*tick); + fprintf(file, " AvgTime: %8.4f\n", perfTimer[ii].average*tick); + fprintf(file, " StdevTime: %8.4f\n", perfTimer[ii].stdev*tick); + } + } + + fprintf(file, "\n"); +} + +/// Returns current time as a 64-bit integer. This portable version +/// returns the number of microseconds since mindight, Jamuary 1, 1970. +/// Hence, timing data will have a resolution of 1 microsecond. +/// Platforms with access to calls with lower latency or higher +/// resolution (such as a cycle counter) may wish to replace this +/// implementation and change the conversion factor in getTick as +/// appropriate. +/// \see getTick for the conversion factor between the integer time +/// units of this function and seconds. +static uint64_t getTime(void) +{ + struct timeval ptime; + uint64_t t = 0; + gettimeofday(&ptime, (struct timezone *)NULL); + t = ((uint64_t)1000000)*(uint64_t)ptime.tv_sec + (uint64_t)ptime.tv_usec; + + return t; +} + +/// Returns the factor for converting the integer time reported by +/// getTime into seconds. The portable getTime returns values in units +/// of microseconds so the conversion is simply 1e-6. +/// \see getTime +static double getTick(void) +{ + double seconds_per_cycle = 1.0e-6; + return seconds_per_cycle; +} + +/// Collect timer statistics across ranks. +void timerStats(void) +{ + double sendBuf[numberOfTimers], recvBuf[numberOfTimers]; + + // Determine average of each timer across ranks + for (int ii = 0; ii < numberOfTimers; ii++) + sendBuf[ii] = (double)perfTimer[ii].total; + addDoubleParallel(sendBuf, recvBuf, numberOfTimers); + + for (int ii = 0; ii < numberOfTimers; ii++) + perfTimer[ii].average = recvBuf[ii] / (double)getNRanks(); + + + // Determine min and max across ranks and which rank + RankReduceData reduceSendBuf[numberOfTimers], reduceRecvBuf[numberOfTimers]; + for (int ii = 0; ii < numberOfTimers; ii++) + { + reduceSendBuf[ii].val = (double)perfTimer[ii].total; + reduceSendBuf[ii].rank = getMyRank(); + } + minRankDoubleParallel(reduceSendBuf, reduceRecvBuf, numberOfTimers); + for (int ii = 0; ii < numberOfTimers; ii++) + { + perfTimer[ii].minValue = reduceRecvBuf[ii].val; + perfTimer[ii].minRank = reduceRecvBuf[ii].rank; + } + maxRankDoubleParallel(reduceSendBuf, reduceRecvBuf, numberOfTimers); + for (int ii = 0; ii < numberOfTimers; ii++) + { + perfTimer[ii].maxValue = reduceRecvBuf[ii].val; + perfTimer[ii].maxRank = reduceRecvBuf[ii].rank; + } + + // Determine standard deviation + for (int ii = 0; ii < numberOfTimers; ii++) + { + double temp = (double)perfTimer[ii].total - perfTimer[ii].average; + sendBuf[ii] = temp * temp; + } + addDoubleParallel(sendBuf, recvBuf, numberOfTimers); + for (int ii = 0; ii < numberOfTimers; ii++) + { + perfTimer[ii].stdev = sqrt(recvBuf[ii] / (double) getNRanks()); + } +} + diff --git a/comd-cl/src-cl/performanceTimers.h b/comd-cl/src-cl/performanceTimers.h new file mode 100644 index 0000000..67353f7 --- /dev/null +++ b/comd-cl/src-cl/performanceTimers.h @@ -0,0 +1,74 @@ +/// \file +/// Performance timer functions. +#ifndef __PERFORMANCE_TIMERS_H_ +#define __PERFORMANCE_TIMERS_H_ + +#include + +/// Timer handles +enum TimerHandle{totalTimer, + loopTimer, + timestepTimer, + positionTimer, + velocityTimer, + redistributeTimer, + atomHaloTimer, + computeForceTimer, + eamHaloTimer, + commHaloTimer, + commReduceTimer, + oclLoop, + oclTimestep, + oclPosition, + oclVelocity, + oclForce, + oclRedistribute, + oclCopy, + numberOfTimers}; + +/// Use the startTimer and stopTimer macros for timers in code regions +/// that may be performance sensitive. These can be compiled away by +/// defining NTIMING. If you are placing a timer anywere outside of a +/// tight loop, consider calling profileStart and profileStop instead. +/// +/// Place calls as follows to collect time for code pieces. +/// Time is collected everytime this portion of code is executed. +/// +/// ... +/// startTimer(computeForceTimer); +/// computeForce(sim); +/// stopTimer(computeForceTimer); +/// ... +/// +#ifndef NTIMING +#define startTimer(handle) \ + do \ + { \ + profileStart(handle); \ + } while(0) +#define stopTimer(handle) \ + do \ + { \ + profileStop(handle); \ + } while(0) +#else +#define startTimer(handle) +#define stopTimer(handle) +#endif + +/// Use profileStart and profileStop only for timers that should *never* +/// be turned off. Typically this means they are outside the main +/// simulation loop. If the timer is inside the main loop use +/// startTimer and stopTimer instead. +void profileStart(const enum TimerHandle handle); +void profileStop(const enum TimerHandle handle); + +/// Use to get elapsed time (lap timer). +double getElapsedTime(const enum TimerHandle handle); + +/// Print timing results. +void printPerformanceResults(int nGlobalAtoms); + +/// Print timing results to Yaml file +void printPerformanceResultsYaml(FILE* file); +#endif diff --git a/comd-cl/src-cl/pfx_boxes.c b/comd-cl/src-cl/pfx_boxes.c new file mode 100644 index 0000000..3e59f61 --- /dev/null +++ b/comd-cl/src-cl/pfx_boxes.c @@ -0,0 +1,57 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#include "helpers.h" + +void setPfxArgsSoa(cl_kernel pfxKernel, DevSimSoa* devSim) +{ + /** Set the arguments for the pfxSumBoxes kernel. + **/ + + int err = 0; + int nArg = 0; + // field arrays + err = clSetKernelArg(pfxKernel, nArg++, sizeof(cl_mem), &devSim->boxes.nAtomsPfx); + err = clSetKernelArg(pfxKernel, nArg++, sizeof(cl_int), &devSim->boxes.nLocalBoxes); + err = clSetKernelArg(pfxKernel, nArg++, 16*256*sizeof(cl_int), NULL); + + if (err != CL_SUCCESS) + { + printf("Error: Failed to set pfxSumBoxes arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("pfxSumBoxes arguments set\n"); + } +} + diff --git a/comd-cl/src-cl/pfx_boxes.cl b/comd-cl/src-cl/pfx_boxes.cl new file mode 100644 index 0000000..613ea7f --- /dev/null +++ b/comd-cl/src-cl/pfx_boxes.cl @@ -0,0 +1,203 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + + +int scan16(local int *scratch, int lid) +{ + int offset = 1; + + int sum = 0; + for(int d = 4096>>4; d > 0; d >>= 4) + { + barrier(CLK_LOCAL_MEM_FENCE); + if(lid < d) + { + int ai = offset * (16*lid + 1) - 1; + int bi = offset * (16*lid + 2) - 1; + int ci = offset * (16*lid + 3) - 1; + int di = offset * (16*lid + 4) - 1; + int ei = offset * (16*lid + 5) - 1; + int fi = offset * (16*lid + 6) - 1; + int gi = offset * (16*lid + 7) - 1; + int hi = offset * (16*lid + 8) - 1; + int ii = offset * (16*lid + 9) - 1; + int ji = offset * (16*lid + 10) - 1; + int ki = offset * (16*lid + 11) - 1; + int li = offset * (16*lid + 12) - 1; + int mi = offset * (16*lid + 13) - 1; + int ni = offset * (16*lid + 14) - 1; + int oi = offset * (16*lid + 15) - 1; + int pi = offset * (16*lid + 16) - 1; + + scratch[pi] += scratch[ai] + scratch[bi] + scratch[ci] + scratch[di] + + scratch[ei] + scratch[fi] + scratch[gi] + + scratch[hi] + scratch[ii] + scratch[ji] + scratch[ki] + + + scratch[li] + scratch[mi] + scratch[ni] + scratch[oi] ; + } + offset <<= 4; + } + + + if(lid == 0) + { + sum = scratch[4096-1]; + scratch[4096-1] = 0; + } + + for(int d = 1; d < 4096; d <<= 4) + { + offset >>= 4; + barrier(CLK_LOCAL_MEM_FENCE); + + if(lid < d) + { + int ai = offset * (16*lid + 1) - 1; + int bi = offset * (16*lid + 2) - 1; + int ci = offset * (16*lid + 3) - 1; + int di = offset * (16*lid + 4) - 1; + int ei = offset * (16*lid + 5) - 1; + int fi = offset * (16*lid + 6) - 1; + int gi = offset * (16*lid + 7) - 1; + int hi = offset * (16*lid + 8) - 1; + int ii = offset * (16*lid + 9) - 1; + int ji = offset * (16*lid + 10) - 1; + int ki = offset * (16*lid + 11) - 1; + int li = offset * (16*lid + 12) - 1; + int mi = offset * (16*lid + 13) - 1; + int ni = offset * (16*lid + 14) - 1; + int oi = offset * (16*lid + 15) - 1; + int pi = offset * (16*lid + 16) - 1; + + int t1 = scratch[ai] + scratch[pi]; + int t2 = scratch[bi]; + int t3 = scratch[ci]; + int t4 = scratch[di]; + int t5 = scratch[ei]; + int t6 = scratch[fi]; + int t7 = scratch[gi]; + int t8 = scratch[hi]; + int t9 = scratch[ii]; + int t10 = scratch[ji]; + int t11 = scratch[ki]; + int t12 = scratch[li]; + int t13 = scratch[mi]; + int t14 = scratch[ni]; + int t15 = scratch[oi]; + + scratch[ai] = scratch[pi]; + scratch[bi] = t1; + scratch[ci] = t1 + t2; + scratch[di] = t1 + t2 + t3; + scratch[ei] = t1 + t2 + t3 + t4; + scratch[fi] = t1 + t2 + t3 + t4 + t5; + scratch[gi] = t1 + t2 + t3 + t4 + t5 + t6; + scratch[hi] = t1 + t2 + t3 + t4 + t5 + t6 + t7; + scratch[ii] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8; + scratch[ji] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8 + t9; + scratch[ki] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8 + t9 + t10; + scratch[li] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8 + t9 + t10 + t11; + scratch[mi] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8 + t9 + t10 + t11 + t12; + scratch[ni] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8 + t9 + t10 + t11 + t12 + t13; + scratch[oi] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8 + t9 + t10 + t11 + t12 + t13 + t14; + scratch[pi] = t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8 + t9 + t10 + t11 + t12 + t13 + t14 + t15; + } + } + + return sum; +} + +kernel void pfxSumBoxes ( global int *boxes, + int length, + local int *scratch + ) +{ + + int tid = get_global_id(0); + int lid = get_local_id(0); + + // 256 work items can do 4096 elems + int size = (length < 4096) ? 256 : (length/4096 + 1) * 256; + //int size = (length < 1024) ? 256 : (length/1024 + 1) * 256; + + int sum = 0, sum_p = 0; + local int sum_0[1]; + sum_0[0] = 0; + + tid = get_global_id(0); + + while (tid < size) + { + + for(int i = 0; i < 16; i++) + { + scratch[16 * lid + i] = 0; + if(16 * tid + i < length) + scratch[16 * lid + i] = boxes[16 * tid + i]; + } + +#if 0 + for(int i = 0; i < 4; i++) + { + scratch[4 * lid + i] = 0; + if(4 * tid + i < length) + scratch[4 * lid + i] = hist[4 * tid + i]; + } +#endif + sum = scan16(scratch, lid); + //sum = scan4(scratch, lid); + barrier(CLK_LOCAL_MEM_FENCE); + + if(lid == 0) + sum_0[0] += sum_p; + + sum_p = sum; + barrier(CLK_LOCAL_MEM_FENCE); + + + for(int i = 0; i < 16; i++) + { + if(16 * tid + i < length) + boxes[16 * tid + i] = sum_0[0] + scratch[16 * lid + i]; + } + +#if 0 + + for(int i = 0; i < 4; i++) + { + if(4 * tid + i < length) + hist[4 * tid + i] = sum_0[0] + scratch[4 * lid + i]; + } +#endif + + tid += 256; + } +} + diff --git a/comd-cl/src-cl/pfx_boxes.h b/comd-cl/src-cl/pfx_boxes.h new file mode 100644 index 0000000..2b3041f --- /dev/null +++ b/comd-cl/src-cl/pfx_boxes.h @@ -0,0 +1,43 @@ +/******************************************************************************* +Copyright (c) 2015 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef PFX_BOXES_H +#define PFX_BOXES_H + +#include "cl_utils.h" +#include "CoMDTypes.h" + +struct DevSimSoaSt; +struct DevSimAosSt; + +void setPfxArgsSoa(cl_kernel, struct DevSimSoaSt *); + +#endif diff --git a/comd-cl/src-cl/random.c b/comd-cl/src-cl/random.c new file mode 100644 index 0000000..0457143 --- /dev/null +++ b/comd-cl/src-cl/random.c @@ -0,0 +1,75 @@ +/// \file +/// Simple random number generators for uniform and Gaussian +/// distributions. The generator in lcg61 and the hash in mkSeed aren't +/// really industrial strength, but they're more than good enough for +/// present purposes. + +#include "random.h" + +#include + +/// \details +/// Use the Box-Muller method to sample a Gaussian distribution with +/// zero mean and unit variance. To ensure the same input seed always +/// generates the same returned value we do not use the standard +/// technique of saving one of the two generated randoms for the next +/// call. +/// +/// \param [in,out] seed Seed for generator. +/// +/// \return A pseudo-random number in the interval (-infinity, infinity). +real_t gasdev(uint64_t* seed) +{ + real_t rsq,v1,v2; + do + { + v1 = 2.0*lcg61(seed)-1.0; + v2 = 2.0*lcg61(seed)-1.0; + rsq = v1*v1+v2*v2; + } while (rsq >= 1.0 || rsq == 0.0); + + return v2 * sqrt(-2.0*log(rsq)/rsq); +} + +/// \details +/// A 61-bit prime modulus linear congruential generator with +/// modulus = 2^61 -1. +/// +/// \param [in,out] seed Seed for generator. +/// +/// \return A pseudo-random number in the interval [0, 1]. +double lcg61(uint64_t* seed) +{ + static const double convertToDouble = 1.0/UINT64_C(2305843009213693951); + + *seed *= UINT64_C(437799614237992725); + *seed %= UINT64_C(2305843009213693951); + + return *seed*convertToDouble; +} + +/// \details +/// Forms a 64-bit seed for lcg61 from the combination of 2 32-bit Knuth +/// multiplicative hashes, then runs off 10 values to pass up the worst +/// of the early low-bit correlations. +/// +/// \param [in] id An id number such as an atom gid that is unique to +/// each entity that requires random numbers. +/// +/// \param [in] callSite A unique number for each call site in the code +/// that needs to generate random seeds. Using a different value for +/// callSite allows different parts of the code to obtain different +/// random streams for the same id. +/// +/// \return A 64-bit seed that is unique to the id and call site. +uint64_t mkSeed(uint32_t id, uint32_t callSite) +{ + uint32_t s1 = id * UINT32_C(2654435761); + uint32_t s2 = (id+callSite) * UINT32_C(2654435761); + + uint64_t iSeed = (UINT64_C(0x100000000) * s1) + s2; + for (unsigned jj=0; jj<10; ++jj) + lcg61(&iSeed); + + return iSeed; +} diff --git a/comd-cl/src-cl/random.h b/comd-cl/src-cl/random.h new file mode 100644 index 0000000..3fea955 --- /dev/null +++ b/comd-cl/src-cl/random.h @@ -0,0 +1,20 @@ +/// \file +/// Simple random number generators for uniform and gaussian +/// distributions. + +#ifndef __RANDOM_H +#define __RANDOM_H + +#include "mytype.h" +#include + +/// Return a random number from a Gaussian distribution. +real_t gasdev(uint64_t* seed); + +/// Return a random number from a uniform distribution. +double lcg61(uint64_t* seed); + +/// Return a seed suitable for calling lcg61 or gasdev. +uint64_t mkSeed(uint32_t id, uint32_t callSite); + +#endif diff --git a/comd-cl/src-cl/timestep.c b/comd-cl/src-cl/timestep.c new file mode 100644 index 0000000..d58d73b --- /dev/null +++ b/comd-cl/src-cl/timestep.c @@ -0,0 +1,155 @@ +/// \file +/// Leapfrog time integrator + +#include "timestep.h" + +#include "CoMDTypes.h" +#include "linkCells.h" +#include "parallel.h" +#include "performanceTimers.h" +#include "deformation.h" + +static void advanceVelocity(SimFlat* s, int nBoxes, real_t dt); +static void advancePosition(SimFlat* s, int nBoxes, real_t dt); + + +/// Advance the simulation time to t+dt using a leap frog method +/// (equivalent to velocity verlet). +/// +/// Forces must be computed before calling the integrator the first time. +/// +/// - Advance velocities half time step using forces +/// - Advance positions full time step using velocities +/// - Update link cells and exchange remote particles +/// - Compute forces +/// - Update velocities half time step using forces +/// +/// This leaves positions, velocities, and forces at t+dt, with the +/// forces ready to perform the half step velocity update at the top of +/// the next call. +/// +/// After nSteps the kinetic energy is computed for diagnostic output. +double timestep(SimFlat* s, int nSteps, real_t dt) +{ + for (int ii=0; iiboxes->nLocalBoxes, 0.5*dt); + stopTimer(velocityTimer); + + startTimer(positionTimer); + advancePosition(s, s->boxes->nLocalBoxes, dt); + stopTimer(positionTimer); + + startTimer(redistributeTimer); + redistributeAtoms(s); + stopTimer(redistributeTimer); + + startTimer(computeForceTimer); + computeForce(s); + stopTimer(computeForceTimer); + + startTimer(velocityTimer); + advanceVelocity(s, s->boxes->nLocalBoxes, 0.5*dt); + stopTimer(velocityTimer); + } + + kineticEnergy(s); + + return s->ePotential; +} + +void computeForce(SimFlat* s) +{ + s->pot->force(s); +} + + +void advanceVelocity(SimFlat* s, int nBoxes, real_t dt) +{ + for (int iBox=0; iBoxboxes->nAtoms[iBox]; ii++,iOff++) + { + s->atoms->p[iOff][0] += dt*s->atoms->f[iOff][0]; + s->atoms->p[iOff][1] += dt*s->atoms->f[iOff][1]; + s->atoms->p[iOff][2] += dt*s->atoms->f[iOff][2]; + } + } +} + +void advancePosition(SimFlat* s, int nBoxes, real_t dt) +{ + for (int iBox=0; iBoxboxes->nAtoms[iBox]; ii++,iOff++) + { + int iSpecies = s->atoms->iSpecies[iOff]; + real_t invMass = 1.0/s->species[iSpecies].mass; + s->atoms->r[iOff][0] += dt*s->atoms->p[iOff][0]*invMass; + s->atoms->r[iOff][1] += dt*s->atoms->p[iOff][1]*invMass; + s->atoms->r[iOff][2] += dt*s->atoms->p[iOff][2]*invMass; + } + } +} + +/// Calculates total kinetic and potential energy across all tasks. The +/// local potential energy is a by-product of the force routine. +void kineticEnergy(SimFlat* s) +{ + real_t eLocal[2]; + eLocal[0] = s->ePotential; + eLocal[1] = 0; + for (int iBox=0; iBoxboxes->nLocalBoxes; iBox++) + { + for (int iOff=MAXATOMS*iBox,ii=0; iiboxes->nAtoms[iBox]; ii++,iOff++) + { + int iSpecies = s->atoms->iSpecies[iOff]; + real_t invMass = 0.5/s->species[iSpecies].mass; + eLocal[1] += ( s->atoms->p[iOff][0] * s->atoms->p[iOff][0] + + s->atoms->p[iOff][1] * s->atoms->p[iOff][1] + + s->atoms->p[iOff][2] * s->atoms->p[iOff][2] )*invMass; + } + } + + real_t eSum[2]; + startTimer(commReduceTimer); + addRealParallel(eLocal, eSum, 2); + stopTimer(commReduceTimer); + + s->ePotential = eSum[0]; + s->eKinetic = eSum[1]; +} + +/// \details +/// This function provides one-stop shopping for the sequence of events +/// that must occur for a proper exchange of halo atoms after the atom +/// positions have been updated by the integrator. +/// +/// - updateLinkCells: Since atoms have moved, some may be in the wrong +/// link cells. +/// - haloExchange (atom version): Sends atom data to remote tasks. +/// - sort: Sort the atoms. +/// +/// \see updateLinkCells +/// \see initAtomHaloExchange +/// \see sortAtomsInCell +void redistributeAtoms(SimFlat* sim) +{ + // apply the reverse deformation so all particles are mapped to + // undeformed coordinates + reverseDeformation(sim); + + updateLinkCells(sim->boxes, sim->atoms); + + startTimer(atomHaloTimer); + haloExchange(sim->atomExchange, sim); + stopTimer(atomHaloTimer); + + for (int ii=0; iiboxes->nTotalBoxes; ++ii) + sortAtomsInCell(sim->atoms, sim->boxes, ii); + + // apply forward deformation + forwardDeformation(sim); + +} diff --git a/comd-cl/src-cl/timestep.h b/comd-cl/src-cl/timestep.h new file mode 100644 index 0000000..2bea6cf --- /dev/null +++ b/comd-cl/src-cl/timestep.h @@ -0,0 +1,16 @@ +/// \file +/// Leapfrog time integrator + +#ifndef __LEAPFROG_H +#define __LEAPFROG_H + +#include "CoMDTypes.h" + +double timestep(SimFlat* s, int n, real_t dt); +void computeForce(SimFlat* s); +void kineticEnergy(SimFlat* s); + +/// Update local and remote link cells after atoms have moved. +void redistributeAtoms(struct SimFlatSt* sim); + +#endif diff --git a/comd-cl/src-cl/timestepCL.c b/comd-cl/src-cl/timestepCL.c new file mode 100644 index 0000000..cb26298 --- /dev/null +++ b/comd-cl/src-cl/timestepCL.c @@ -0,0 +1,121 @@ +#include "helpers.h" + +void setAvArgsSoa(cl_kernel advanceVelocity, DevSimSoa* devSim, cl_real dt) +{ + /** Set the arguments for the advanceVelocity kernel. + Because of the Verlet timestepping scheme we keep the timestep as a separate argument + **/ + + int err = 0; + int nArg = 0; + // field arrays + err = clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.p.x); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.p.y); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.p.z); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.f.x); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.f.y); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.f.z); + // boxes data + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + // timestep + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_real), &dt); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set advanceVelocity arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("advanceVelocity arguments set\n"); + printf("dt = %e\n", dt); + } +} + +void setApArgsSoa(cl_kernel advancePosition, DevSimSoa* devSim, cl_real dt) +{ + /** Set the arguments for the advancePosition kernel. + Because of the Verlet timestepping scheme we keep the timestep as a separate argument + **/ + + int err = 0; + int nArg = 0; + // field arrays + err = clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.p.x); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.p.y); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.p.z); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.r.x); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.r.y); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.r.z); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.iSpecies); + // boxes data + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + // timestep + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->invMass); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_real), &dt); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set advancePosition arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("advancePosition arguments set\n"); + printf("dt = %e\n", dt); + } +} + +void setAvArgsAos(cl_kernel advanceVelocity, DevSimAos* devSim, cl_real dt) +{ + /** Set the arguments for the advanceVelocity kernel. + Because of the Verlet timestepping scheme we keep the timestep as a separate argument + **/ + + int err = 0; + int nArg = 0; + // field arrays + err = clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.p); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->atoms.f); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + err |= clSetKernelArg(advanceVelocity, nArg++, sizeof(cl_real), &dt); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set advanceVelocityAos arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("advanceVelocityAos arguments set\n"); + printf("dt = %e\n", dt); + } +} + +void setApArgsAos(cl_kernel advancePosition, DevSimAos* devSim, cl_real dt) +{ + /** Set the arguments for the advancePosition kernel. + Because of the Verlet timestepping scheme we keep the timestep as a separate argument + **/ + + int err = 0; + int nArg = 0; + // field arrays + err = clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.p); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->atoms.r); + //err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->m); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_mem), &devSim->boxes.nAtoms); + err |= clSetKernelArg(advancePosition, nArg++, sizeof(cl_real), &dt); + if (err != CL_SUCCESS) + { + printf("Error: Failed to set advancePositionAos arguments! %d\n", err); + printf("Error: %s\n", print_cl_errstring(err)); + exit(1); + } + else + { + printf("advancePositionAos arguments set\n"); + printf("dt = %e\n", dt); + } +} + diff --git a/comd-cl/src-cl/timestepCL.h b/comd-cl/src-cl/timestepCL.h new file mode 100644 index 0000000..c607651 --- /dev/null +++ b/comd-cl/src-cl/timestepCL.h @@ -0,0 +1,18 @@ +#ifndef TIMESTEPCL_H +#define TIMESTEPCL_H + +#include "cl_utils.h" +#include "CoMDTypes.h" + +struct DevSimSoaSt; +struct DevSimAosSt; + +void setAvArgsSoa(cl_kernel AdvanceVelocity, struct DevSimSoaSt* simDevSoa, cl_real dt); + +void setApArgsSoa(cl_kernel advancePosition, struct DevSimSoaSt* simDevSoa, cl_real dt); + +void setAvArgsAos(cl_kernel AdvanceVelocity, struct DevSimAosSt* simDevSoa, cl_real dt); + +void setApArgsAos(cl_kernel advancePosition, struct DevSimAosSt* simDevSoa, cl_real dt); + +#endif diff --git a/comd-cl/src-cl/timestep_kernels.cl b/comd-cl/src-cl/timestep_kernels.cl new file mode 100644 index 0000000..9af8b44 --- /dev/null +++ b/comd-cl/src-cl/timestep_kernels.cl @@ -0,0 +1,205 @@ +// timestep subroutines + +/** + Since OpenCL doesn't pick up #include properly, we need to manually switch real_t from + float to double in each kernel file individually. + **/ + +#define N_MAX_NEIGHBORS 27 +#define PERIODIC 1 + +#define KERN_DIAG 0 + +#if defined(cl_khr_fp64) // Khronos extension available? +#pragma OPENCL EXTENSION cl_khr_fp64 : enable +#elif defined(cl_amd_fp64) // AMD extension available? +#pragma OPENCL EXTENSION cl_amd_fp64 : enable +#endif + +/* CL_REAL_T is set to single or double depending on compile time flags */ +typedef CL_REAL_T real_t; +typedef CL_REAL4_T cl_real4; + + +__kernel void advanceVelocitySoa ( + __global real_t* px, + __global real_t* py, + __global real_t* pz, + __global const real_t* fx, + __global const real_t* fy, + __global const real_t* fz, + __global const int* nAtoms, + const real_t dt + ) + +{ + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + int offset = get_global_size(0); + int iOff = iAtom + offset*iBox; + + real_t dtLocal = dt; + +#if(KERN_DIAG > 0) + if (iAtom == 0 && iBox == 0) printf(" AV dt = %e\n", dt); + + if (nAtoms[iBox] > 0) printf("%d, %d, %d\n", iBox, iAtom, nAtoms[iBox]); +#endif + + if (iAtom < nAtoms[iBox]) + { + px[iOff] -= dtLocal*fx[iOff]; + py[iOff] -= dtLocal*fy[iOff]; + pz[iOff] -= dtLocal*fz[iOff]; + } + +} + +__kernel void advancePositionSoa ( + __global const real_t* px, + __global const real_t* py, + __global const real_t* pz, + __global real_t* xPos, + __global real_t* yPos, + __global real_t* zPos, + __global const int* iSpecies, + __global const int* nAtoms, + __global const real_t* invMass, + const real_t dt + ) + +{ + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + int offset = get_global_size(0); + int iOff = iAtom + offset*iBox; + +#if(KERN_DIAG > 0) + + if (nAtoms[iBox] > 0) printf("%d, %d, %d\n", iBox, iAtom, nAtoms[iBox]); +#endif + +#if(KERN_DIAG > 0) + if (iAtom == 0 && iBox == 0) printf(" AP dt = %e\n", dtLocal); + if (iAtom == 0 && iBox == 0) printf("%f, %f, %f\n", dtLocal, dt, rMass); +#endif + + if (iAtom < nAtoms[iBox]) + { + int iType = iSpecies[iOff]; + real_t iMass = invMass[iType]; + xPos[iOff] += dt*px[iOff]*iMass; + yPos[iOff] += dt*py[iOff]*iMass; + zPos[iOff] += dt*pz[iOff]*iMass; + +#if(KERN_DIAG > 0) + if (iAtom == 0 && iBox == 0) printf("%d, %d, %f, %f, %f\n", iBox, iAtom, xPos[iOff], yPos[iOff], zPos[iOff]); +#endif + } + +} + +__kernel void advanceVelocityAos ( + __global cl_real4* p, + __global const cl_real4* f, + __global const int* nAtoms, + const real_t dt + ) + +{ + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + int offset = get_global_size(0); + int iOff = iAtom + offset*iBox; + + cl_real4 dtLocal = {dt, dt, dt, 0.0}; + //cl_real4 dtLocal = {0.0, 0.0, 0.0, 0.0}; + +#if(KERN_DIAG > 0) + if (iAtom == 0 && iBox == 0) printf("AoS AV dt = %e\n", dt); + + if (nAtoms[iBox] > 0) printf("%d, %d, %d\n", iBox, iAtom, nAtoms[iBox]); +#endif + + if (iAtom < nAtoms[iBox]) + { + p[iOff] -= dtLocal*f[iOff]; + } + +} + +__kernel void advancePositionAos ( + __global const cl_real4* p, + __global cl_real4* pos, + //__global const real_t* mass, + __global const int* nAtoms, + const real_t rMass, + const real_t dt + ) + +{ + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + int offset = get_global_size(0); + int iOff = iAtom + offset*iBox; + +#if(KERN_DIAG > 0) + if (iAtom == 0 && iBox == 0) printf("AoS AP dt = %e\n", dt); + + if (nAtoms[iBox] > 0) printf("%d, %d, %d\n", iBox, iAtom, nAtoms[iBox]); +#endif + + real_t rdt = dt/rMass; + + cl_real4 dtLocal = {rdt, rdt, rdt, 0.0}; + +#if(KERN_DIAG > 0) + if (iAtom == 0 && iBox == 0) printf("%e, %e, %e\n", dtLocal.x, dt, rMass); +#endif + + if (iAtom < nAtoms[iBox]) + { + pos[iOff] += dtLocal*p[iOff]; + +#if(KERN_DIAG > 0) + if (iAtom == 0 && iBox == 0) printf("%d, %d, %f, %f, %f\n", iBox, iAtom, pos[iOff].x, pos[iOff].y, pos[iOff].z); +#endif + } + +} + +__kernel void computeKineticSoa ( + __global const real_t* px, + __global const real_t* py, + __global const real_t* pz, + __global const int* nAtoms, + __global real_t* eKinetic) +{ + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + int offset = get_global_size(0); + int iOff = iAtom + offset*iBox; + + eKinetic[iOff] = px[iOff]*px[iOff] + py[iOff]*py[iOff] + pz[iOff]*pz[iOff]; +} + +__kernel void computeKineticAos( + __global const cl_real4* p, + __global const int* nAtoms, + __global real_t* eKinetic) +{ + int iAtom = get_global_id(0); + int iBox = get_global_id(1); + + int offset = get_global_size(0); + int iOff = iAtom + offset*iBox; + + eKinetic[iOff] = p[iOff].x*p[iOff].x + p[iOff].y*p[iOff].y + p[iOff].z*p[iOff].z; +} + + diff --git a/comd-cl/src-cl/yamlOutput.c b/comd-cl/src-cl/yamlOutput.c new file mode 100644 index 0000000..1610daf --- /dev/null +++ b/comd-cl/src-cl/yamlOutput.c @@ -0,0 +1,103 @@ +/// \file +/// Write simulation information in YAML format. +/// +/// Information regarding platform, run parameters, performance, etc., +/// are written to a file whose name is generated from the CoMDVariant +/// and the time of the run. This provides a simple mechanism to track +/// and compare performance etc. +/// +/// There are much more sophisticated libraries and routines available +/// to handle YAML, but this simple implemenation handles everything we +/// really need. + +#include "yamlOutput.h" + +#include +#include +#include + +#include "CoMD_info.h" +#include "mytype.h" +#include "parallel.h" + +FILE* yamlFile = NULL; + +static const char* CoMDVersion = "1.1"; +static const char* CoMDVariant = "CoMDParallel"; + +static void getTimeString(char* timestring) +{ + time_t rawtime; + struct tm* timeinfo; + time(&rawtime); + timeinfo = localtime(&rawtime); + + sprintf(timestring, + "%4d-%02i-%02d, %02d:%02d:%02d", + timeinfo->tm_year+1900, + timeinfo->tm_mon+1, + timeinfo->tm_mday, + timeinfo->tm_hour, + timeinfo->tm_min, + timeinfo->tm_sec); +} + +void yamlBegin(void) +{ + if (!PRINT_YAML || !printRank()) + return; + + char filename[64]; + time_t rawtime; + time (&rawtime); + struct tm* ptm = localtime(&rawtime); + char sdate[25]; + //use tm_mon+1 because tm_mon is 0 .. 11 instead of 1 .. 12 + sprintf (sdate,"%04d:%02d:%02d-%02d:%02d:%02d", + ptm->tm_year + 1900, ptm->tm_mon+1, + ptm->tm_mday, ptm->tm_hour, ptm->tm_min,ptm->tm_sec); + sprintf(filename, "%s.%s.yaml", CoMDVariant, sdate); + yamlFile = fopen(filename, "w"); +} + +void yamlAppInfo(FILE* file) +{ + if (!PRINT_YAML || !printRank()) + return; + printSeparator(file); + fprintf(file,"Mini-Application Name : %s\n", CoMDVariant); + fprintf(file,"Mini-Application Version : %s\n", CoMDVersion); + fprintf(file,"Platform:\n"); + fprintf(file," hostname: %s\n", CoMD_HOSTNAME); + fprintf(file," kernel name: %s\n", CoMD_KERNEL_NAME); + fprintf(file," kernel release: %s\n", CoMD_KERNEL_RELEASE); + fprintf(file," processor: %s\n", CoMD_PROCESSOR); + fprintf(file,"Build:\n"); + fprintf(file," CC: %s\n", CoMD_COMPILER); + fprintf(file," compiler version: %s\n", CoMD_COMPILER_VERSION); + fprintf(file," CFLAGS: %s\n", CoMD_CFLAGS); + fprintf(file," LDFLAGS: %s\n", CoMD_LDFLAGS); + fprintf(file," using MPI: %s\n", builtWithMpi() ? "true":"false"); + fprintf(file," Threading: none\n"); + fprintf(file," Double Precision: %s\n", (sizeof(real_t)==sizeof(double)?"true":"false")); + char timestring[32]; + getTimeString(timestring); + fprintf(file,"Run Date/Time: %s\n", timestring); + fprintf(file, "\n"); + fflush(file); +} + +void yamlEnd(void) +{ + if (!PRINT_YAML || !printRank()) + return; + + fclose(yamlFile); +} + +void printSeparator(FILE* file) +{ + //fprintf(file,"=========================================================================\n"); + fprintf(file,"\n"); +} + diff --git a/comd-cl/src-cl/yamlOutput.h b/comd-cl/src-cl/yamlOutput.h new file mode 100644 index 0000000..2c5550e --- /dev/null +++ b/comd-cl/src-cl/yamlOutput.h @@ -0,0 +1,19 @@ +/// \file +/// Write simulation information in YAML format. + +#ifndef __YAML_OUTPUT_H +#define __YAML_OUTPUT_H + +#include + +/// Provide access to the YAML file in other compliation units. +extern FILE* yamlFile; + +void yamlBegin(void); +void yamlEnd(void); + +void yamlAppInfo(FILE* file); + +void printSeparator(FILE* file); + +#endif