// Libraries
#include <Arduino.h>
//#include "driver/adc.h"
#include <WiFi.h>
const float ADC_LUT[4096] = { 0,
48.8000,50.0000,51.6000,52.8000,54.0000,55.6000,56.8000,58.0000,59.4000,60.8000,62.0000,63.4000,64.8000,66.0000,67.2000,
68.8000,69.8000,71.0000,72.6000,73.8000,75.0000,76.2000,77.8000,79.0000,80.0000,81.0000,82.0000,83.0000,84.0000,85.0000,
86.0000,87.0000,87.8000,88.8000,89.8000,90.8000,91.8000,92.8000,93.8000,94.8000,95.8000,96.8000,98.0000,99.0000,100.6000,
101.8000,103.0000,104.4000,105.8000,107.0000,108.0000,109.6000,110.8000,112.0000,113.0000,114.0000,115.0000,116.0000,117.0000,118.0000,
119.2000,120.2000,121.2000,122.2000,123.2000,124.2000,125.4000,126.4000,127.4000,128.4000,129.6000,130.8000,131.8000,132.8000,134.0000,
135.0000,136.2000,137.4000,138.6000,139.8000,140.8000,141.8000,143.0000,144.0000,145.0000,146.0000,147.0000,148.0000,149.0000,150.0000,
151.2000,152.2000,153.2000,154.4000,155.4000,156.4000,157.4000,158.6000,159.6000,160.8000,161.8000,162.8000,164.0000,165.0000,166.2000,
167.6000,168.8000,169.8000,171.0000,172.0000,173.2000,174.4000,175.8000,176.8000,177.8000,178.8000,179.8000,180.8000,181.8000,182.8000,
183.8000,184.8000,185.8000,186.8000,187.8000,188.8000,189.8000,191.0000,192.0000,193.0000,194.0000,195.0000,196.0000,197.2000,198.4000,
199.4000,200.6000,201.8000,202.8000,203.8000,204.8000,206.0000,207.0000,208.0000,209.0000,210.0000,211.2000,212.4000,213.6000,214.8000,
215.8000,216.8000,217.8000,219.0000,220.0000,221.0000,222.0000,223.2000,224.2000,225.4000,226.4000,227.4000,228.4000,229.6000,230.6000,
231.6000,232.6000,233.6000,234.8000,235.8000,236.8000,237.8000,238.8000,239.8000,240.8000,242.0000,243.0000,244.2000,245.6000,246.8000,
247.8000,249.0000,250.0000,251.4000,252.8000,253.8000,255.0000,256.0000,257.0000,258.0000,259.0000,260.0000,261.0000,262.2000,263.2000,
264.2000,265.2000,266.4000,267.4000,268.4000,269.4000,270.6000,271.6000,272.8000,273.8000,275.0000,276.4000,277.8000,279.0000,280.0000,
281.6000,282.8000,284.0000,285.2000,286.8000,287.8000,288.8000,289.8000,290.8000,291.8000,292.6000,293.4000,294.4000,295.2000,296.0000,
297.0000,298.0000,299.0000,299.8000,300.8000,301.8000,302.8000,303.6000,304.6000,305.8000,307.0000,308.0000,309.2000,310.6000,311.8000,
312.8000,314.0000,315.0000,316.4000,317.8000,318.8000,320.0000,321.0000,322.0000,323.0000,324.0000,325.0000,326.0000,326.8000,327.8000,
328.8000,329.8000,330.8000,331.8000,332.8000,333.8000,334.8000,335.8000,336.8000,337.8000,338.8000,340.0000,341.0000,342.0000,343.0000,
344.2000,345.4000,346.4000,347.6000,348.8000,349.8000,350.8000,351.8000,353.0000,354.0000,355.0000,356.0000,357.2000,358.4000,359.6000,
360.8000,361.8000,362.8000,363.8000,365.0000,366.0000,367.0000,368.2000,369.4000,370.8000,371.8000,372.8000,374.0000,375.0000,376.4000,
377.6000,378.8000,379.8000,381.0000,382.0000,383.2000,384.4000,385.6000,386.8000,387.8000,388.8000,389.8000,391.0000,392.0000,393.0000,
394.0000,395.0000,396.2000,397.4000,398.6000,399.6000,400.8000,401.8000,402.8000,403.8000,404.8000,405.8000,406.8000,407.8000,408.8000,
409.8000,410.8000,411.8000,412.8000,413.8000,414.8000,416.0000,417.0000,418.0000,419.0000,420.0000,421.0000,422.2000,423.2000,424.4000,
425.6000,426.6000,427.8000,428.8000,429.8000,430.8000,431.8000,432.8000,434.0000,435.0000,436.0000,437.0000,438.0000,439.0000,440.0000,
441.0000,442.0000,443.0000,444.0000,445.0000,446.0000,447.2000,448.2000,449.4000,450.6000,451.6000,452.8000,453.8000,454.8000,455.8000,
457.0000,458.0000,459.0000,460.0000,461.2000,462.4000,463.4000,464.6000,465.8000,466.8000,467.8000,469.0000,470.0000,471.2000,472.4000,
473.6000,474.8000,475.8000,476.8000,478.0000,479.0000,480.0000,481.2000,482.4000,483.6000,484.8000,485.8000,486.8000,488.0000,489.0000,
490.0000,491.2000,492.4000,493.6000,494.8000,495.8000,496.8000,497.8000,498.8000,499.8000,500.8000,501.8000,502.8000,503.8000,504.8000,
505.8000,506.8000,507.8000,508.8000,509.8000,510.8000,511.8000,512.8000,514.0000,515.0000,516.0000,517.2000,518.4000,519.6000,520.8000,
521.8000,522.8000,524.0000,525.0000,526.0000,527.2000,528.4000,529.4000,530.2000,531.0000,532.0000,533.0000,534.0000,535.0000,536.0000,
536.8000,537.8000,538.8000,539.8000,540.8000,541.6000,542.6000,543.4000,544.4000,545.8000,547.0000,548.6000,550.0000,551.2000,552.8000,
554.0000,555.4000,556.8000,558.0000,559.8000,560.8000,561.8000,562.8000,563.8000,564.6000,565.6000,566.4000,567.4000,568.2000,569.2000,
570.0000,571.0000,572.0000,573.0000,574.0000,575.0000,576.0000,577.0000,578.2000,579.6000,580.8000,581.8000,583.0000,584.0000,585.4000,
586.8000,587.8000,589.0000,590.0000,591.4000,592.4000,593.0000,594.0000,594.8000,595.4000,596.0000,596.8000,597.6000,598.2000,599.0000,
599.8000,600.4000,601.0000,601.8000,602.8000,603.2000,604.0000,604.8000,605.6000,606.2000,607.0000,607.8000,608.8000,609.8000,611.0000,
612.4000,613.8000,614.8000,616.0000,617.4000,618.8000,619.8000,621.0000,622.4000,623.8000,624.8000,625.8000,626.8000,627.8000,628.8000,
629.8000,630.8000,631.8000,632.8000,633.6000,634.6000,635.6000,636.6000,637.4000,638.4000,639.4000,640.4000,641.8000,642.8000,644.0000,
645.0000,646.4000,647.8000,648.8000,650.0000,651.0000,652.4000,653.8000,654.8000,656.0000,657.0000,658.0000,659.0000,660.0000,661.0000,
662.0000,663.0000,664.0000,665.2000,666.2000,667.2000,668.2000,669.4000,670.4000,671.4000,672.6000,673.8000,674.8000,676.0000,677.0000,
678.0000,679.2000,680.6000,681.8000,682.8000,683.8000,685.0000,686.0000,687.2000,688.4000,689.4000,690.6000,691.6000,692.6000,693.6000,
694.6000,695.6000,696.6000,697.6000,698.6000,699.6000,700.8000,701.8000,702.8000,703.8000,704.8000,705.8000,706.8000,707.8000,708.8000,
709.8000,710.8000,711.8000,712.8000,713.8000,714.6000,715.6000,716.6000,717.6000,718.6000,719.6000,720.8000,721.8000,722.8000,723.8000,
725.0000,726.0000,727.0000,728.2000,729.4000,730.6000,731.8000,732.8000,733.8000,735.0000,736.0000,737.0000,738.0000,739.2000,740.4000,
741.4000,742.6000,743.8000,744.8000,745.8000,746.8000,748.0000,749.0000,750.0000,751.0000,752.2000,753.6000,754.8000,756.0000,757.2000,
758.6000,759.8000,761.0000,762.2000,763.6000,764.8000,766.0000,767.0000,768.4000,769.2000,770.0000,771.0000,772.0000,773.0000,773.8000,
774.8000,775.8000,776.8000,777.6000,778.4000,779.2000,780.0000,781.0000,782.0000,783.0000,783.8000,784.8000,786.0000,787.0000,788.4000,
789.6000,790.8000,791.8000,793.0000,794.0000,795.4000,796.8000,797.8000,799.0000,800.0000,801.0000,802.0000,803.2000,804.2000,805.4000,
806.4000,807.6000,808.8000,809.8000,810.8000,811.8000,812.8000,813.8000,815.0000,816.0000,817.0000,818.0000,819.2000,820.4000,821.6000,
822.8000,823.8000,825.0000,826.0000,827.0000,828.2000,829.4000,830.6000,831.8000,832.8000,833.8000,834.8000,835.8000,836.8000,838.0000,
839.0000,840.0000,841.0000,842.0000,843.0000,844.0000,845.2000,846.2000,847.4000,848.6000,849.8000,851.0000,852.6000,853.8000,855.0000,
856.8000,858.0000,859.2000,860.8000,862.0000,863.2000,864.6000,865.4000,866.4000,867.2000,868.0000,869.0000,870.0000,871.0000,871.8000,
872.8000,873.8000,874.8000,875.6000,876.4000,877.2000,878.2000,879.0000,880.0000,881.0000,882.2000,883.6000,884.8000,885.8000,886.8000,
888.0000,889.0000,890.0000,891.2000,892.6000,893.8000,894.8000,895.8000,896.8000,897.8000,898.8000,899.8000,900.8000,901.8000,902.8000,
903.8000,904.8000,905.8000,906.8000,907.8000,908.8000,909.8000,910.8000,911.8000,912.6000,913.6000,914.6000,915.6000,916.6000,917.6000,
918.6000,919.6000,920.4000,921.4000,922.4000,923.4000,924.4000,925.4000,926.4000,927.4000,928.4000,929.8000,930.8000,932.0000,933.0000,
934.4000,935.8000,936.8000,938.0000,939.0000,940.4000,941.8000,942.8000,944.0000,945.0000,946.0000,947.0000,948.0000,949.0000,950.0000,
951.2000,952.2000,953.4000,954.4000,955.4000,956.6000,957.6000,958.8000,959.8000,960.8000,961.6000,962.4000,963.4000,964.2000,965.0000,
966.0000,967.0000,968.0000,968.8000,969.8000,970.8000,971.8000,972.8000,973.6000,974.4000,975.2000,976.2000,977.8000,979.0000,980.2000,
981.8000,983.0000,984.2000,985.8000,987.0000,988.2000,989.8000,991.0000,992.0000,993.0000,994.0000,995.0000,996.0000,997.0000,998.0000,
999.0000,1000.0000,1001.0000,1001.8000,1002.8000,1003.8000,1004.8000,1005.8000,1006.8000,1007.8000,1009.0000,1010.8000,1012.8000,1014.2000,1016.0000,
1017.8000,1019.8000,1021.4000,1023.0000,1024.8000,1025.8000,1026.8000,1027.8000,1028.8000,1029.8000,1031.0000,1032.0000,1033.0000,1034.0000,1035.0000,
1036.0000,1037.0000,1038.2000,1039.2000,1040.4000,1041.2000,1042.0000,1043.0000,1044.0000,1045.0000,1046.0000,1047.0000,1047.8000,1048.8000,1049.8000,
1050.8000,1051.8000,1052.6000,1053.6000,1054.4000,1055.2000,1056.2000,1057.8000,1059.4000,1061.0000,1062.6000,1064.0000,1065.8000,1067.0000,1068.8000,
1070.2000,1071.8000,1072.8000,1073.8000,1074.6000,1075.2000,1076.0000,1077.0000,1077.8000,1078.8000,1079.6000,1080.2000,1081.0000,1082.0000,1082.8000,
1083.8000,1084.6000,1085.2000,1086.0000,1087.0000,1087.8000,1088.8000,1089.8000,1091.0000,1092.0000,1093.0000,1094.2000,1095.4000,1096.6000,1097.8000,
1098.8000,1099.8000,1101.0000,1102.0000,1103.0000,1104.2000,1105.2000,1106.4000,1107.4000,1108.4000,1109.6000,1110.6000,1111.6000,1112.8000,1113.8000,
1114.8000,1115.8000,1116.8000,1117.8000,1118.8000,1119.8000,1121.0000,1122.0000,1123.0000,1124.4000,1125.6000,1126.8000,1127.8000,1129.0000,1130.0000,
1131.0000,1132.4000,1133.6000,1134.8000,1135.8000,1136.8000,1137.4000,1138.0000,1139.0000,1139.8000,1140.4000,1141.0000,1142.0000,1142.8000,1143.4000,
1144.0000,1145.0000,1145.8000,1146.4000,1147.0000,1148.0000,1148.8000,1149.4000,1150.0000,1151.0000,1151.8000,1152.8000,1153.8000,1154.8000,1156.0000,
1157.0000,1158.0000,1159.2000,1160.4000,1161.6000,1162.8000,1163.8000,1165.0000,1166.0000,1167.0000,1168.2000,1169.0000,1170.0000,1171.0000,1172.0000,
1173.0000,1174.0000,1174.8000,1175.8000,1176.8000,1177.8000,1178.8000,1179.8000,1180.6000,1181.6000,1182.4000,1183.4000,1184.4000,1185.8000,1187.2000,
1188.8000,1190.0000,1191.8000,1193.0000,1194.8000,1196.0000,1197.8000,1199.0000,1200.4000,1201.0000,1201.8000,1202.8000,1203.4000,1204.0000,1204.8000,
1205.8000,1206.4000,1207.0000,1207.8000,1208.8000,1209.4000,1210.0000,1210.8000,1211.8000,1212.4000,1213.0000,1213.8000,1214.8000,1215.4000,1216.0000,
1217.4000,1218.8000,1220.0000,1221.8000,1223.0000,1224.2000,1225.8000,1227.0000,1228.4000,1229.8000,1231.0000,1232.6000,1233.4000,1234.2000,1235.0000,
1236.0000,1237.0000,1238.0000,1239.0000,1239.8000,1240.8000,1241.8000,1242.8000,1243.6000,1244.6000,1245.4000,1246.2000,1247.0000,1248.0000,1249.2000,
1250.4000,1251.6000,1252.8000,1253.8000,1255.0000,1256.0000,1257.0000,1258.4000,1259.6000,1260.8000,1261.8000,1263.0000,1264.0000,1265.2000,1266.6000,
1267.8000,1268.8000,1270.0000,1271.0000,1272.4000,1273.6000,1274.8000,1276.0000,1277.0000,1278.2000,1279.4000,1280.8000,1281.6000,1282.6000,1283.6000,
1284.6000,1285.4000,1286.4000,1287.4000,1288.2000,1289.2000,1290.2000,1291.2000,1292.0000,1293.0000,1294.0000,1295.0000,1296.0000,1297.0000,1298.2000,
1299.4000,1300.6000,1301.8000,1302.8000,1303.8000,1305.0000,1306.0000,1307.0000,1308.0000,1309.2000,1310.4000,1311.6000,1312.8000,1313.6000,1314.4000,
1315.4000,1316.2000,1317.0000,1318.0000,1319.0000,1320.0000,1321.0000,1322.0000,1322.8000,1323.8000,1324.8000,1325.8000,1326.8000,1327.6000,1328.6000,
1329.8000,1330.8000,1331.8000,1333.0000,1334.0000,1335.0000,1336.2000,1337.4000,1338.8000,1339.8000,1340.8000,1342.0000,1343.0000,1344.0000,1345.0000,
1346.0000,1347.0000,1348.0000,1349.0000,1350.2000,1351.2000,1352.2000,1353.2000,1354.2000,1355.2000,1356.4000,1357.4000,1358.4000,1359.4000,1360.4000,
1361.6000,1362.8000,1363.8000,1364.8000,1365.8000,1366.8000,1368.0000,1369.0000,1370.0000,1371.0000,1372.0000,1373.2000,1374.2000,1375.4000,1376.6000,
1377.6000,1378.8000,1379.8000,1380.8000,1381.8000,1382.8000,1383.8000,1384.8000,1385.8000,1386.8000,1387.8000,1389.0000,1390.0000,1391.0000,1392.0000,
1393.0000,1394.0000,1395.0000,1396.0000,1396.8000,1397.8000,1398.8000,1399.8000,1400.8000,1401.8000,1402.8000,1403.8000,1404.8000,1405.8000,1406.6000,
1407.6000,1408.6000,1409.8000,1410.8000,1411.8000,1412.8000,1414.0000,1415.0000,1416.0000,1417.0000,1418.0000,1419.2000,1420.4000,1421.6000,1422.6000,
1423.8000,1424.8000,1425.8000,1427.0000,1428.0000,1429.4000,1430.6000,1431.8000,1432.8000,1434.0000,1435.0000,1436.2000,1437.6000,1438.8000,1439.8000,
1440.8000,1441.8000,1443.0000,1444.0000,1445.0000,1446.0000,1447.0000,1448.0000,1449.0000,1450.0000,1451.0000,1452.2000,1453.2000,1454.4000,1455.4000,
1456.6000,1457.8000,1458.8000,1460.0000,1461.0000,1462.2000,1463.6000,1464.8000,1465.8000,1467.0000,1468.0000,1469.4000,1470.8000,1471.8000,1472.8000,
1473.8000,1474.6000,1475.4000,1476.2000,1477.0000,1478.0000,1479.0000,1479.8000,1480.8000,1481.8000,1482.4000,1483.2000,1484.0000,1485.0000,1486.0000,
1486.8000,1487.8000,1488.8000,1490.0000,1491.2000,1492.8000,1493.8000,1495.0000,1496.2000,1497.8000,1498.8000,1500.0000,1501.4000,1502.8000,1503.8000,
1505.0000,1506.0000,1507.0000,1508.0000,1509.0000,1510.0000,1511.0000,1512.0000,1513.0000,1514.0000,1515.0000,1516.0000,1517.0000,1518.0000,1519.0000,
1520.0000,1521.0000,1522.0000,1523.4000,1524.8000,1525.8000,1527.0000,1528.0000,1529.2000,1530.6000,1531.8000,1532.8000,1534.0000,1535.0000,1536.2000,
1537.2000,1538.0000,1539.0000,1540.0000,1541.0000,1542.0000,1543.0000,1544.0000,1544.8000,1545.8000,1546.8000,1547.8000,1548.8000,1549.8000,1550.8000,
1551.6000,1552.6000,1553.8000,1554.8000,1555.8000,1556.8000,1557.8000,1558.8000,1560.0000,1561.0000,1562.0000,1563.0000,1564.0000,1565.2000,1566.2000,
1567.4000,1568.6000,1569.6000,1570.8000,1571.8000,1572.8000,1573.8000,1575.0000,1576.0000,1577.0000,1578.0000,1579.2000,1580.4000,1581.4000,1582.6000,
1583.8000,1584.8000,1585.8000,1586.8000,1587.8000,1588.8000,1589.8000,1590.8000,1591.8000,1592.8000,1593.8000,1594.6000,1595.6000,1596.6000,1597.6000,
1598.6000,1599.6000,1600.6000,1601.8000,1602.8000,1603.8000,1605.0000,1606.0000,1607.0000,1608.2000,1609.4000,1610.6000,1611.8000,1612.8000,1613.8000,
1615.0000,1616.0000,1617.0000,1618.0000,1619.0000,1620.0000,1621.0000,1622.0000,1623.0000,1624.0000,1625.0000,1626.0000,1627.0000,1628.0000,1629.0000,
1630.0000,1631.0000,1632.0000,1633.2000,1634.8000,1635.8000,1637.0000,1638.2000,1639.8000,1640.8000,1642.0000,1643.2000,1644.6000,1645.8000,1647.0000,
1648.2000,1649.0000,1650.0000,1651.0000,1651.8000,1652.8000,1653.8000,1654.8000,1655.6000,1656.4000,1657.2000,1658.0000,1659.0000,1660.0000,1661.0000,
1661.8000,1662.8000,1663.8000,1664.8000,1665.8000,1666.8000,1667.8000,1669.0000,1670.0000,1671.0000,1672.0000,1673.0000,1674.0000,1675.2000,1676.4000,
1677.4000,1678.6000,1679.6000,1680.6000,1681.2000,1682.0000,1682.8000,1683.8000,1684.6000,1685.2000,1686.0000,1686.8000,1687.8000,1688.4000,1689.0000,
1690.0000,1690.8000,1691.8000,1692.4000,1693.0000,1694.0000,1694.8000,1695.6000,1696.4000,1697.8000,1698.8000,1700.0000,1701.0000,1702.0000,1703.4000,
1704.8000,1705.8000,1707.0000,1708.0000,1709.2000,1710.4000,1711.8000,1712.8000,1713.8000,1714.6000,1715.4000,1716.2000,1717.0000,1718.0000,1719.0000,
1719.8000,1720.8000,1721.8000,1722.6000,1723.4000,1724.2000,1725.0000,1726.0000,1727.0000,1728.0000,1729.0000,1730.0000,1731.4000,1732.6000,1733.8000,
1734.8000,1736.0000,1737.0000,1738.4000,1739.6000,1740.8000,1741.8000,1743.0000,1744.0000,1745.2000,1746.4000,1747.4000,1748.6000,1749.8000,1750.8000,
1751.8000,1752.8000,1754.0000,1755.0000,1756.0000,1757.0000,1758.2000,1759.4000,1760.6000,1761.4000,1762.2000,1763.0000,1764.0000,1765.0000,1766.0000,
1767.0000,1767.8000,1768.8000,1769.8000,1770.8000,1771.8000,1772.6000,1773.6000,1774.4000,1775.2000,1776.2000,1777.4000,1778.8000,1779.8000,1781.0000,
1782.0000,1783.0000,1784.4000,1785.8000,1786.8000,1787.8000,1789.0000,1790.0000,1791.4000,1792.8000,1794.0000,1795.4000,1796.8000,1798.0000,1799.6000,
1801.0000,1802.2000,1803.8000,1805.0000,1806.6000,1807.8000,1808.8000,1809.8000,1810.8000,1811.8000,1812.6000,1813.6000,1814.4000,1815.2000,1816.0000,
1817.0000,1818.0000,1819.0000,1819.8000,1820.8000,1821.8000,1822.8000,1823.6000,1824.6000,1825.8000,1827.0000,1828.0000,1829.2000,1830.6000,1831.8000,
1833.0000,1834.0000,1835.4000,1836.8000,1837.8000,1839.0000,1840.0000,1841.0000,1842.0000,1843.0000,1843.8000,1844.8000,1845.8000,1846.6000,1847.4000,
1848.2000,1849.0000,1850.0000,1851.0000,1851.8000,1852.8000,1853.8000,1854.6000,1855.4000,1856.2000,1857.8000,1859.0000,1860.8000,1862.0000,1863.8000,
1865.0000,1866.6000,1868.0000,1869.2000,1870.8000,1872.0000,1873.0000,1874.0000,1875.0000,1876.0000,1877.0000,1878.0000,1879.0000,1880.0000,1881.0000,
1882.0000,1883.0000,1884.0000,1885.0000,1886.0000,1887.0000,1888.0000,1889.0000,1890.0000,1891.0000,1892.0000,1893.0000,1894.0000,1895.0000,1896.0000,
1897.0000,1898.0000,1899.2000,1900.2000,1901.2000,1902.2000,1903.2000,1904.2000,1905.0000,1906.0000,1907.0000,1908.0000,1909.0000,1909.8000,1910.8000,
1911.8000,1912.8000,1913.8000,1914.6000,1915.4000,1916.2000,1917.2000,1918.0000,1919.0000,1920.0000,1921.0000,1922.4000,1923.8000,1924.8000,1926.0000,
1927.2000,1928.6000,1929.8000,1930.8000,1932.0000,1933.2000,1934.6000,1935.8000,1936.8000,1938.0000,1939.0000,1940.0000,1941.0000,1942.0000,1943.0000,
1944.2000,1945.4000,1946.4000,1947.6000,1948.6000,1949.8000,1950.8000,1951.8000,1952.8000,1953.8000,1955.0000,1956.0000,1957.0000,1958.0000,1959.0000,
1960.2000,1961.4000,1962.4000,1963.6000,1964.8000,1965.8000,1966.8000,1967.8000,1968.8000,1969.8000,1970.8000,1971.8000,1972.6000,1973.4000,1974.2000,
1975.2000,1976.0000,1977.0000,1978.0000,1979.0000,1979.8000,1980.8000,1981.8000,1982.8000,1983.8000,1984.6000,1985.8000,1986.8000,1987.8000,1989.0000,
1990.0000,1991.0000,1992.0000,1993.2000,1994.2000,1995.4000,1996.6000,1997.8000,1998.8000,1999.8000,2001.0000,2002.0000,2003.4000,2004.8000,2005.8000,
2007.0000,2008.0000,2009.4000,2010.8000,2011.8000,2013.0000,2014.0000,2015.4000,2016.8000,2017.8000,2018.8000,2019.8000,2020.8000,2021.8000,2022.8000,
2023.8000,2024.8000,2025.8000,2026.8000,2027.8000,2028.8000,2029.8000,2030.8000,2031.8000,2032.4000,2033.0000,2033.8000,2034.0000,2034.8000,2035.4000,
2036.0000,2036.8000,2037.0000,2037.8000,2038.4000,2039.0000,2039.8000,2040.0000,2040.8000,2041.2000,2042.0000,2042.6000,2043.0000,2043.8000,2044.2000,
2044.8000,2045.6000,2046.0000,2046.8000,2047.0000,2047.8000,2048.8000,2050.3999,2052.0000,2053.6001,2055.0000,2056.8000,2058.0000,2059.8000,2061.2000,
2062.8000,2064.2000,2065.0000,2066.0000,2066.8000,2067.8000,2068.3999,2069.0000,2070.0000,2070.8000,2071.8000,2072.6001,2073.2000,2074.0000,2075.0000,
2075.8000,2076.6001,2077.3999,2078.0000,2079.0000,2079.8000,2080.8000,2082.0000,2083.8000,2085.0000,2086.2000,2087.8000,2089.0000,2090.2000,2091.8000,
2093.0000,2094.3999,2095.8000,2096.8000,2097.8000,2098.8000,2099.8000,2100.8000,2101.8000,2102.8000,2103.8000,2104.8000,2105.8000,2106.6001,2107.6001,
2108.6001,2109.3999,2110.3999,2111.3999,2112.3999,2113.6001,2114.8000,2115.8000,2116.8000,2117.8000,2119.0000,2120.0000,2121.0000,2122.0000,2123.2000,
2124.3999,2125.6001,2126.8000,2127.8000,2128.8000,2129.8000,2130.8000,2132.0000,2133.0000,2134.0000,2135.0000,2136.0000,2137.2000,2138.2000,2139.3999,
2140.6001,2141.6001,2142.8000,2143.8000,2144.8000,2145.8000,2146.8000,2147.6001,2148.6001,2149.3999,2150.3999,2151.2000,2152.2000,2153.0000,2154.0000,
2155.0000,2156.0000,2157.0000,2158.0000,2159.0000,2159.8000,2161.0000,2162.3999,2163.8000,2165.0000,2166.2000,2167.8000,2169.0000,2170.0000,2171.6001,
2172.8000,2174.0000,2175.6001,2176.8000,2177.6001,2178.3999,2179.2000,2180.0000,2181.0000,2182.0000,2182.8000,2183.8000,2184.8000,2185.6001,2186.3999,
2187.2000,2188.0000,2189.0000,2190.0000,2190.8000,2191.8000,2192.8000,2194.0000,2195.3999,2196.8000,2198.0000,2199.2000,2200.8000,2201.8000,2203.0000,
2204.6001,2205.8000,2207.0000,2208.2000,2209.0000,2209.8000,2210.8000,2211.3999,2212.0000,2212.8000,2213.8000,2214.3999,2215.0000,2216.0000,2216.8000,
2217.6001,2218.0000,2219.0000,2219.8000,2220.6001,2221.2000,2222.0000,2222.8000,2223.6001,2224.2000,2225.0000,2226.0000,2227.0000,2228.0000,2229.0000,
2230.0000,2230.8000,2231.8000,2232.8000,2233.8000,2234.8000,2235.6001,2236.3999,2237.3999,2238.2000,2239.0000,2240.0000,2241.2000,2242.3999,2243.6001,
2244.8000,2245.8000,2246.8000,2248.0000,2249.0000,2250.0000,2251.2000,2252.3999,2253.6001,2254.8000,2255.8000,2257.0000,2258.0000,2259.2000,2260.6001,
2261.8000,2262.8000,2264.0000,2265.2000,2266.6001,2267.8000,2268.8000,2270.0000,2271.0000,2272.3999,2273.3999,2274.6001,2275.6001,2276.8000,2277.8000,
2278.8000,2279.8000,2280.8000,2281.8000,2282.8000,2283.8000,2284.8000,2286.0000,2287.0000,2288.0000,2289.0000,2290.3999,2291.8000,2293.0000,2294.0000,
2295.3999,2296.8000,2298.0000,2299.0000,2300.3999,2301.8000,2302.8000,2304.0000,2305.0000,2306.2000,2307.3999,2308.3999,2309.6001,2310.8000,2311.8000,
2312.8000,2313.8000,2314.8000,2316.0000,2317.0000,2318.0000,2319.0000,2320.0000,2321.2000,2322.2000,2323.2000,2324.3999,2325.3999,2326.3999,2327.6001,
2328.6001,2329.6001,2330.8000,2331.8000,2332.8000,2333.8000,2334.8000,2335.8000,2336.8000,2337.8000,2338.8000,2339.8000,2340.6001,2341.6001,2342.3999,
2343.2000,2344.2000,2345.0000,2346.0000,2347.0000,2348.0000,2349.0000,2350.0000,2351.0000,2351.8000,2353.0000,2354.6001,2355.8000,2357.0000,2358.8000,
2360.0000,2361.2000,2362.8000,2364.0000,2365.3999,2366.8000,2368.0000,2369.2000,2370.6001,2371.8000,2372.8000,2374.0000,2375.0000,2376.3999,2377.8000,
2378.8000,2380.0000,2381.0000,2382.2000,2383.6001,2384.8000,2385.6001,2386.6001,2387.6001,2388.3999,2389.3999,2390.2000,2391.2000,2392.2000,2393.0000,
2394.0000,2395.0000,2396.0000,2397.0000,2398.0000,2399.0000,2400.0000,2401.0000,2402.0000,2403.0000,2404.0000,2405.0000,2406.0000,2407.0000,2408.0000,
2409.0000,2410.0000,2411.0000,2412.0000,2413.0000,2414.0000,2415.0000,2416.0000,2417.2000,2418.3999,2419.8000,2420.8000,2421.8000,2423.0000,2424.0000,
2425.0000,2426.3999,2427.6001,2428.8000,2429.8000,2431.0000,2432.0000,2433.0000,2434.0000,2434.8000,2435.8000,2436.8000,2437.6001,2438.3999,2439.2000,
2440.0000,2441.0000,2442.0000,2443.0000,2443.8000,2444.8000,2445.8000,2446.8000,2447.6001,2448.3999,2449.8000,2450.8000,2451.8000,2453.0000,2454.0000,
2455.2000,2456.6001,2457.8000,2458.8000,2460.0000,2461.0000,2462.2000,2463.3999,2464.8000,2465.8000,2467.0000,2468.0000,2469.2000,2470.3999,2471.8000,
2472.8000,2474.0000,2475.0000,2476.2000,2477.3999,2478.8000,2479.8000,2480.8000,2481.8000,2482.8000,2484.0000,2485.0000,2486.0000,2487.0000,2488.0000,
2489.0000,2490.0000,2491.0000,2492.0000,2493.0000,2494.0000,2495.0000,2496.0000,2497.0000,2498.0000,2499.0000,2500.0000,2501.0000,2502.0000,2503.0000,
2504.0000,2505.0000,2506.0000,2507.0000,2508.0000,2509.0000,2510.0000,2511.0000,2512.0000,2513.0000,2514.0000,2515.0000,2515.8000,2516.8000,2517.8000,
2518.8000,2519.6001,2520.3999,2521.2000,2522.0000,2523.0000,2524.0000,2525.0000,2525.8000,2526.8000,2527.8000,2528.8000,2530.0000,2531.6001,2533.0000,
2534.2000,2535.8000,2537.0000,2538.6001,2539.8000,2541.2000,2542.8000,2544.0000,2545.0000,2546.0000,2547.0000,2548.0000,2549.0000,2550.0000,2551.0000,
2552.0000,2553.0000,2554.0000,2555.0000,2556.0000,2557.0000,2558.0000,2559.0000,2560.0000,2561.0000,2562.0000,2563.0000,2564.0000,2565.0000,2566.0000,
2567.0000,2568.0000,2569.0000,2570.0000,2571.0000,2572.0000,2573.0000,2574.0000,2575.0000,2576.0000,2577.0000,2578.2000,2579.2000,2580.3999,2581.6001,
2582.6001,2583.8000,2584.8000,2585.8000,2586.8000,2587.8000,2589.0000,2590.0000,2591.0000,2592.0000,2593.3999,2594.8000,2596.0000,2597.3999,2598.8000,
2600.0000,2601.3999,2602.8000,2604.0000,2605.2000,2606.8000,2608.0000,2609.0000,2610.0000,2610.8000,2611.8000,2612.8000,2613.8000,2614.8000,2615.8000,
2616.6001,2617.6001,2618.3999,2619.3999,2620.2000,2621.0000,2622.0000,2623.0000,2624.0000,2625.3999,2626.8000,2628.0000,2629.3999,2630.8000,2632.0000,
2633.3999,2634.8000,2636.0000,2637.3999,2638.8000,2640.0000,2641.0000,2641.8000,2642.8000,2643.8000,2644.3999,2645.2000,2646.0000,2647.0000,2648.0000,
2648.8000,2649.8000,2650.6001,2651.3999,2652.2000,2653.0000,2654.0000,2654.8000,2655.8000,2656.8000,2657.8000,2659.0000,2660.0000,2661.2000,2662.6001,
2663.8000,2664.8000,2666.0000,2667.0000,2668.0000,2669.3999,2670.6001,2671.8000,2672.8000,2673.8000,2675.0000,2676.0000,2677.0000,2678.0000,2679.0000,
2680.2000,2681.3999,2682.3999,2683.6001,2684.8000,2685.8000,2686.8000,2687.8000,2688.8000,2689.8000,2691.0000,2692.0000,2693.0000,2694.0000,2695.0000,
2696.0000,2697.0000,2698.2000,2699.2000,2700.3999,2701.3999,2702.6001,2703.6001,2704.8000,2705.8000,2707.0000,2708.0000,2709.2000,2710.3999,2711.8000,
2712.8000,2714.0000,2715.0000,2716.0000,2717.3999,2718.8000,2719.8000,2720.8000,2721.8000,2723.0000,2724.0000,2725.0000,2726.0000,2727.0000,2728.0000,
2729.2000,2730.3999,2731.3999,2732.6001,2733.8000,2734.8000,2735.8000,2736.8000,2737.8000,2739.0000,2740.0000,2741.0000,2742.2000,2743.3999,2744.6001,
2745.8000,2746.8000,2747.8000,2749.0000,2750.0000,2751.0000,2752.2000,2753.0000,2753.8000,2754.6001,2755.2000,2756.0000,2756.8000,2757.8000,2758.2000,
2759.0000,2759.8000,2760.8000,2761.2000,2762.0000,2762.8000,2763.8000,2764.2000,2765.0000,2765.8000,2766.8000,2767.3999,2768.0000,2769.0000,2770.0000,
2771.0000,2772.0000,2773.0000,2774.0000,2775.0000,2776.0000,2777.0000,2778.0000,2779.0000,2780.0000,2780.8000,2781.8000,2782.8000,2783.8000,2785.0000,
2786.0000,2787.2000,2788.6001,2789.8000,2790.8000,2792.0000,2793.0000,2794.3999,2795.8000,2796.8000,2798.0000,2799.0000,2800.2000,2801.2000,2802.0000,
2803.0000,2804.0000,2805.0000,2806.0000,2807.0000,2808.0000,2809.0000,2810.0000,2811.0000,2812.0000,2812.8000,2813.8000,2814.8000,2815.8000,2816.8000,
2817.8000,2819.0000,2820.0000,2821.0000,2822.0000,2823.0000,2824.2000,2825.3999,2826.3999,2827.6001,2828.8000,2829.8000,2830.8000,2831.8000,2832.8000,
2834.0000,2835.0000,2836.0000,2837.0000,2838.2000,2839.2000,2840.3999,2841.6001,2842.8000,2843.8000,2844.8000,2845.8000,2847.0000,2848.0000,2849.0000,
2850.2000,2851.3999,2852.6001,2853.8000,2854.8000,2856.0000,2857.0000,2858.0000,2859.2000,2860.3999,2861.8000,2862.8000,2863.8000,2865.0000,2866.0000,
2867.0000,2868.2000,2869.3999,2870.6001,2871.8000,2872.8000,2873.8000,2875.0000,2876.0000,2877.0000,2878.0000,2879.2000,2880.3999,2881.2000,2882.0000,
2883.0000,2884.0000,2885.0000,2885.8000,2886.8000,2887.8000,2888.8000,2889.6001,2890.3999,2891.2000,2892.2000,2893.0000,2894.0000,2895.0000,2895.8000,
2897.0000,2898.0000,2899.3999,2900.8000,2901.8000,2903.0000,2904.2000,2905.6001,2906.8000,2908.0000,2909.0000,2910.3999,2911.8000,2912.8000,2913.8000,
2914.8000,2915.6001,2916.6001,2917.3999,2918.3999,2919.2000,2920.0000,2921.0000,2922.0000,2923.0000,2924.0000,2925.0000,2926.0000,2926.8000,2927.8000,
2928.8000,2929.8000,2930.8000,2931.8000,2932.8000,2933.8000,2934.8000,2935.8000,2936.8000,2937.8000,2938.8000,2939.8000,2940.8000,2941.8000,2942.8000,
2943.8000,2945.0000,2946.0000,2947.0000,2948.0000,2949.0000,2950.0000,2951.0000,2952.0000,2953.0000,2954.0000,2955.0000,2956.0000,2957.0000,2958.0000,
2959.0000,2960.0000,2961.8000,2963.0000,2964.8000,2966.2000,2967.8000,2969.3999,2971.0000,2972.6001,2974.0000,2975.6001,2976.8000,2977.3999,2978.0000,
2979.0000,2979.8000,2980.6001,2981.2000,2982.0000,2982.8000,2983.8000,2984.3999,2985.0000,2986.0000,2986.8000,2987.6001,2988.2000,2989.0000,2989.8000,
2990.8000,2991.3999,2992.0000,2993.2000,2994.3999,2995.8000,2996.8000,2997.8000,2999.0000,3000.0000,3001.0000,3002.2000,3003.6001,3004.8000,3005.8000,
3006.8000,3008.0000,3009.0000,3010.0000,3011.0000,3012.0000,3013.0000,3014.0000,3015.0000,3016.0000,3017.0000,3018.0000,3019.0000,3020.0000,3021.0000,
3022.0000,3023.0000,3024.0000,3025.3999,3026.8000,3028.0000,3029.0000,3030.3999,3031.8000,3032.8000,3034.0000,3035.2000,3036.6001,3037.8000,3039.0000,
3040.0000,3041.0000,3042.0000,3043.0000,3043.8000,3044.8000,3045.8000,3046.6001,3047.3999,3048.2000,3049.0000,3050.0000,3051.0000,3051.8000,3052.8000,
3053.8000,3054.8000,3055.6001,3056.6001,3058.0000,3059.3999,3061.0000,3062.3999,3063.8000,3065.2000,3066.8000,3068.0000,3069.8000,3071.0000,3072.6001,
3073.8000,3074.8000,3075.8000,3077.0000,3078.0000,3079.0000,3080.2000,3081.3999,3082.6001,3083.8000,3084.8000,3085.8000,3087.0000,3088.0000,3089.0000,
3090.0000,3091.0000,3092.0000,3093.0000,3094.0000,3094.8000,3095.8000,3096.8000,3097.8000,3098.8000,3099.8000,3100.8000,3101.8000,3102.8000,3103.8000,
3104.8000,3105.8000,3106.8000,3107.8000,3108.8000,3110.0000,3111.0000,3112.0000,3113.0000,3114.0000,3115.2000,3116.3999,3117.3999,3118.6001,3119.8000,
3120.8000,3121.8000,3122.8000,3123.8000,3124.8000,3126.0000,3127.0000,3128.0000,3129.0000,3130.0000,3131.0000,3132.2000,3133.2000,3134.3999,3135.3999,
3136.3999,3137.3999,3138.2000,3139.0000,3140.0000,3141.0000,3141.8000,3142.8000,3143.8000,3144.8000,3145.6001,3146.3999,3147.3999,3148.2000,3149.0000,
3150.0000,3151.0000,3152.0000,3152.8000,3153.8000,3154.8000,3156.0000,3157.0000,3158.0000,3159.0000,3160.0000,3161.0000,3162.0000,3163.0000,3164.0000,
3165.0000,3166.0000,3167.0000,3168.0000,3169.0000,3170.0000,3171.0000,3172.0000,3173.2000,3174.2000,3175.3999,3176.6001,3177.6001,3178.8000,3179.8000,
3180.8000,3181.8000,3182.8000,3183.8000,3184.8000,3185.8000,3186.8000,3187.8000,3188.6001,3189.3999,3190.2000,3191.0000,3192.0000,3193.0000,3194.0000,
3194.8000,3195.8000,3196.8000,3197.6001,3198.6001,3199.3999,3200.2000,3201.2000,3202.2000,3203.3999,3204.3999,3205.3999,3206.3999,3207.6001,3208.6001,
3209.6001,3210.6001,3211.8000,3212.8000,3213.8000,3214.8000,3215.8000,3216.8000,3217.6001,3218.2000,3219.0000,3220.0000,3220.8000,3221.8000,3222.8000,
3223.3999,3224.2000,3225.0000,3226.0000,3226.8000,3227.8000,3228.8000,3229.3999,3230.2000,3231.0000,3232.0000,3233.0000,3234.0000,3235.3999,3236.8000,
3237.8000,3239.0000,3240.0000,3241.2000,3242.6001,3243.8000,3244.8000,3246.0000,3247.0000,3248.2000,3249.2000,3250.2000,3251.2000,3252.2000,3253.3999,
3254.3999,3255.3999,3256.3999,3257.3999,3258.3999,3259.3999,3260.3999,3261.3999,3262.3999,3263.6001,3264.3999,3265.0000,3266.0000,3266.8000,3267.8000,
3268.6001,3269.2000,3270.0000,3271.0000,3271.8000,3272.6001,3273.3999,3274.0000,3275.0000,3275.8000,3276.8000,3277.3999,3278.0000,3279.0000,3279.8000,
3280.8000,3281.8000,3282.6001,3283.3999,3284.2000,3285.0000,3286.0000,3287.0000,3288.0000,3288.8000,3289.8000,3290.8000,3291.6001,3292.3999,3293.2000,
3294.0000,3295.0000,3296.0000,3296.8000,3297.8000,3298.6001,3299.2000,3300.0000,3301.0000,3301.8000,3302.8000,3303.6001,3304.2000,3305.0000,3306.0000,
3306.8000,3307.8000,3308.6001,3309.2000,3310.0000,3311.0000,3311.8000,3312.8000,3313.8000,3315.0000,3316.0000,3317.0000,3318.2000,3319.3999,3320.6001,
3321.8000,3322.8000,3323.8000,3325.0000,3326.0000,3327.0000,3328.0000,3329.0000,3330.0000,3331.0000,3331.8000,3332.8000,3333.8000,3334.6001,3335.3999,
3336.2000,3337.0000,3338.0000,3339.0000,3340.0000,3340.8000,3341.8000,3342.8000,3343.6001,3344.3999,3345.6001,3346.6001,3347.6001,3348.6001,3349.6001,
3350.8000,3351.8000,3352.8000,3353.8000,3354.8000,3355.8000,3356.8000,3357.8000,3358.8000,3359.8000,3360.8000,3361.6001,3362.3999,3363.2000,3364.0000,
3365.0000,3366.0000,3366.8000,3367.8000,3368.8000,3369.6001,3370.2000,3371.0000,3372.0000,3373.0000,3373.8000,3374.8000,3375.8000,3376.6001,3377.3999,
3378.2000,3379.0000,3380.0000,3381.0000,3381.8000,3382.8000,3383.8000,3384.6001,3385.3999,3386.2000,3387.0000,3388.0000,3389.0000,3389.8000,3390.8000,
3391.8000,3392.8000,3393.6001,3394.2000,3395.0000,3396.0000,3397.0000,3397.8000,3398.8000,3399.8000,3400.8000,3401.6001,3402.2000,3403.0000,3404.0000,
3405.0000,3405.8000,3406.8000,3407.8000,3408.8000,3409.6001,3410.3999,3411.2000,3412.0000,3413.0000,3414.0000,3415.0000,3415.8000,3416.8000,3417.8000,
3418.6001,3419.3999,3420.2000,3421.2000,3422.0000,3423.0000,3424.0000,3424.8000,3425.8000,3426.8000,3427.8000,3428.8000,3429.8000,3430.6001,3431.3999,
3432.3999,3433.2000,3434.0000,3435.0000,3436.0000,3437.0000,3438.0000,3439.0000,3439.8000,3440.8000,3441.6001,3442.3999,3443.0000,3444.0000,3444.8000,
3445.8000,3446.6001,3447.2000,3448.0000,3449.0000,3449.8000,3450.8000,3451.6001,3452.2000,3453.0000,3454.0000,3454.8000,3455.8000,3456.3999,3457.2000,
3458.0000,3459.0000,3459.8000,3460.8000,3461.8000,3462.3999,3463.2000,3464.0000,3465.0000,3465.8000,3466.8000,3467.8000,3468.6001,3469.2000,3470.0000,
3471.0000,3471.8000,3472.8000,3473.6001,3474.2000,3475.0000,3476.0000,3476.8000,3477.6001,3478.2000,3479.0000,3480.0000,3480.8000,3481.6001,3482.2000,
3483.0000,3484.0000,3484.8000,3485.6001,3486.2000,3487.0000,3488.0000,3488.8000,3489.8000,3490.3999,3491.2000,3492.0000,3493.0000,3493.8000,3494.8000,
3495.3999,3496.0000,3497.0000,3498.0000,3498.8000,3499.8000,3500.3999,3501.0000,3502.0000,3503.0000,3503.8000,3504.8000,3505.3999,3506.2000,3507.0000,
3508.0000,3508.8000,3509.8000,3510.8000,3511.6001,3512.2000,3513.0000,3514.0000,3515.0000,3515.8000,3516.8000,3517.6001,3518.3999,3519.0000,3520.0000,
3520.8000,3521.8000,3522.6001,3523.2000,3524.0000,3524.8000,3525.8000,3526.3999,3527.0000,3528.0000,3528.8000,3529.8000,3530.3999,3531.0000,3532.0000,
3532.8000,3533.6001,3534.2000,3535.0000,3535.8000,3536.8000,3537.8000,3538.6001,3539.2000,3540.0000,3541.0000,3542.0000,3542.8000,3543.8000,3544.8000,
3545.6001,3546.3999,3547.0000,3548.0000,3549.0000,3549.8000,3550.8000,3551.8000,3552.3999,3553.0000,3553.8000,3554.8000,3555.2000,3556.0000,3556.8000,
3557.3999,3558.0000,3558.8000,3559.6001,3560.0000,3561.0000,3561.8000,3562.2000,3563.0000,3563.8000,3564.6001,3565.0000,3565.8000,3566.8000,3567.2000,
3568.0000,3568.8000,3569.8000,3570.3999,3571.2000,3572.0000,3573.0000,3573.8000,3574.8000,3575.3999,3576.0000,3577.0000,3577.8000,3578.8000,3579.6001,
3580.2000,3581.0000,3582.0000,3582.8000,3583.8000,3584.3999,3585.0000,3586.0000,3586.8000,3587.6001,3588.2000,3589.0000,3589.8000,3590.8000,3591.2000,
3592.0000,3592.8000,3593.8000,3594.3999,3595.0000,3596.0000,3596.8000,3597.6001,3598.0000,3599.0000,3599.8000,3600.6001,3601.0000,3601.8000,3602.6001,
3603.0000,3603.8000,3604.6001,3605.0000,3605.8000,3606.6001,3607.0000,3607.8000,3608.6001,3609.0000,3609.8000,3610.6001,3611.0000,3611.8000,3612.6001,
3613.0000,3613.8000,3614.6001,3615.0000,3615.8000,3616.8000,3617.6001,3618.2000,3619.0000,3620.0000,3621.0000,3621.8000,3622.8000,3623.6001,3624.2000,
3625.0000,3626.0000,3626.8000,3627.8000,3628.8000,3629.3999,3630.2000,3631.0000,3632.0000,3632.8000,3633.8000,3634.3999,3635.0000,3636.0000,3636.8000,
3637.8000,3638.3999,3639.0000,3640.0000,3640.8000,3641.8000,3642.6001,3643.2000,3644.0000,3644.8000,3645.8000,3646.6001,3647.2000,3648.0000,3648.8000,
3649.8000,3650.2000,3651.0000,3651.8000,3652.6001,3653.0000,3654.0000,3654.8000,3655.6001,3656.0000,3657.0000,3657.8000,3658.3999,3659.0000,3659.8000,
3660.8000,3661.2000,3662.0000,3662.8000,3663.6001,3664.2000,3665.0000,3665.8000,3666.0000,3667.0000,3667.8000,3668.0000,3668.8000,3669.6001,3670.0000,
3670.8000,3671.6001,3672.0000,3672.8000,3673.6001,3674.0000,3674.8000,3675.3999,3676.0000,3676.8000,3677.3999,3678.0000,3678.8000,3679.3999,3680.0000,
3680.8000,3681.3999,3682.0000,3682.8000,3683.6001,3684.0000,3684.8000,3685.6001,3686.0000,3686.8000,3687.8000,3688.0000,3689.0000,3689.8000,3690.2000,
3691.0000,3691.8000,3692.2000,3693.0000,3693.8000,3694.3999,3695.0000,3695.8000,3696.3999,3697.0000,3697.6001,3698.0000,3698.8000,3699.0000,3699.8000,
3700.2000,3701.0000,3701.6001,3702.0000,3702.8000,3703.0000,3703.8000,3704.2000,3704.8000,3705.3999,3706.0000,3706.6001,3707.0000,3707.8000,3708.0000,
3708.8000,3709.2000,3710.0000,3710.6001,3711.0000,3711.8000,3712.0000,3712.8000,3713.3999,3714.0000,3714.8000,3715.3999,3716.0000,3716.8000,3717.2000,
3718.0000,3718.8000,3719.0000,3719.8000,3720.6001,3721.0000,3721.8000,3722.3999,3723.0000,3723.8000,3724.2000,3725.0000,3725.8000,3726.2000,3727.0000,
3727.6001,3728.0000,3728.8000,3729.3999,3730.0000,3730.8000,3731.2000,3732.0000,3732.6001,3733.0000,3733.8000,3734.3999,3735.0000,3735.8000,3736.0000,
3736.8000,3737.6001,3738.0000,3738.8000,3739.2000,3740.0000,3740.8000,3741.0000,3741.8000,3742.3999,3743.0000,3743.8000,3744.2000,3745.0000,3745.8000,
3746.8000,3747.3999,3748.0000,3749.0000,3749.8000,3750.6001,3751.2000,3752.0000,3752.8000,3753.8000,3754.3999,3755.0000,3756.0000,3756.8000,3757.6001,
3758.0000,3759.0000,3759.8000,3760.6001,3761.0000,3762.0000,3762.8000,3763.2000,3764.0000,3764.8000,3765.3999,3766.0000,3766.8000,3767.3999,3768.0000,
3768.8000,3769.6001,3770.0000,3771.0000,3771.8000,3772.2000,3773.0000,3773.8000,3774.3999,3775.0000,3775.8000,3776.3999,3777.0000,3777.8000,3778.2000,
3779.0000,3779.8000,3780.0000,3780.8000,3781.3999,3782.0000,3782.8000,3783.2000,3784.0000,3784.8000,3785.0000,3785.8000,3786.6001,3787.0000,3787.8000,
3788.2000,3789.0000,3789.8000,3790.0000,3790.8000,3791.6001,3792.0000,3792.8000,3793.2000,3794.0000,3794.8000,3795.0000,3795.8000,3796.6001,3797.0000,
3797.8000,3798.2000,3799.0000,3799.8000,3800.0000,3800.8000,3801.6001,3802.0000,3802.8000,3803.2000,3804.0000,3804.8000,3805.0000,3805.8000,3806.6001,
3807.0000,3807.8000,3808.2000,3809.0000,3809.6001,3810.0000,3810.8000,3811.2000,3811.8000,3812.3999,3813.0000,3813.8000,3814.0000,3814.8000,3815.3999,
3816.0000,3816.8000,3817.0000,3817.8000,3818.2000,3819.0000,3819.6001,3820.0000,3820.8000,3821.2000,3821.8000,3822.3999,3823.0000,3823.8000,3824.0000,
3825.0000,3825.8000,3826.3999,3827.0000,3828.0000,3828.8000,3829.3999,3830.0000,3831.0000,3831.8000,3832.3999,3833.0000,3833.8000,3834.8000,3835.3999,
3836.0000,3836.8000,3837.8000,3838.3999,3839.0000,3839.8000,3840.6001,3841.0000,3841.8000,3842.3999,3843.0000,3843.8000,3844.2000,3844.8000,3845.6001,
3846.0000,3846.8000,3847.3999,3848.0000,3848.8000,3849.2000,3849.8000,3850.6001,3851.0000,3851.8000,3852.3999,3853.0000,3853.8000,3854.2000,3854.8000,
3855.6001,3856.0000,3856.8000,3857.0000,3857.8000,3858.2000,3858.8000,3859.3999,3860.0000,3860.6001,3861.0000,3861.8000,3862.0000,3862.8000,3863.0000,
3863.8000,3864.2000,3864.8000,3865.2000,3865.8000,3866.3999,3867.0000,3867.6001,3868.0000,3868.8000,3869.0000,3869.8000,3870.0000,3870.8000,3871.2000,
3871.8000,3872.3999,3873.0000,3873.8000,3874.6001,3875.0000,3876.0000,3876.8000,3877.2000,3878.0000,3878.8000,3879.3999,3880.0000,3880.8000,3881.8000,
3882.2000,3883.0000,3883.8000,3884.3999,3885.0000,3885.8000,3886.6001,3887.0000,3887.8000,3888.6001,3889.0000,3889.8000,3890.0000,3890.8000,3891.3999,
3892.0000,3892.6001,3893.0000,3893.8000,3894.0000,3894.8000,3895.2000,3896.0000,3896.6001,3897.0000,3897.8000,3898.0000,3898.8000,3899.2000,3899.8000,
3900.6001,3901.0000,3901.8000,3902.0000,3902.8000,3903.2000,3903.8000,3904.3999,3905.0000,3905.6001,3906.0000,3906.6001,3907.0000,3907.8000,3908.0000,
3908.8000,3909.0000,3909.8000,3910.0000,3910.8000,3911.0000,3911.8000,3912.2000,3912.8000,3913.2000,3913.8000,3914.3999,3914.8000,3915.3999,3916.0000,
3916.6001,3917.0000,3917.6001,3918.0000,3918.6001,3919.0000,3919.8000,3920.0000,3920.8000,3921.0000,3921.8000,3922.0000,3922.8000,3923.0000,3923.8000,
3924.2000,3924.8000,3925.2000,3925.8000,3926.2000,3926.8000,3927.3999,3927.8000,3928.3999,3929.0000,3929.6001,3930.0000,3930.6001,3931.0000,3931.6001,
3932.0000,3932.8000,3933.0000,3933.8000,3934.0000,3934.8000,3935.0000,3935.8000,3936.0000,3936.8000,3937.6001,3938.0000,3938.8000,3939.3999,3940.0000,
3940.8000,3941.3999,3942.0000,3942.8000,3943.3999,3944.0000,3944.8000,3945.2000,3946.0000,3946.8000,3947.2000,3948.0000,3948.8000,3949.0000,3949.8000,
3950.6001,3951.0000,3951.8000,3952.6001,3953.0000,3953.8000,3954.3999,3955.0000,3955.8000,3956.2000,3956.8000,3957.6001,3958.0000,3958.8000,3959.3999,
3960.0000,3960.8000,3961.2000,3962.0000,3962.8000,3963.0000,3963.8000,3964.6001,3965.0000,3965.8000,3966.3999,3967.0000,3967.8000,3968.0000,3968.8000,
3969.0000,3969.8000,3970.0000,3970.8000,3971.0000,3971.6001,3972.0000,3972.6001,3973.0000,3973.3999,3974.0000,3974.3999,3974.8000,3975.2000,3975.8000,
3976.2000,3976.8000,3977.0000,3977.8000,3978.0000,3978.8000,3979.0000,3979.8000,3980.0000,3980.6001,3981.0000,3981.6001,3982.0000,3982.3999,3983.0000,
3983.3999,3983.8000,3984.3999,3985.0000,3985.6001,3986.0000,3986.8000,3987.2000,3987.8000,3988.6001,3989.0000,3989.8000,3990.2000,3990.8000,3991.3999,
3992.0000,3992.8000,3993.0000,3993.8000,3994.3999,3995.0000,3995.8000,3996.0000,3996.8000,3997.2000,3998.0000,3998.6001,3999.0000,3999.8000,4000.2000,
4001.2000,4002.3999,4003.3999,4004.3999,4005.3999,4006.6001,4007.6001,4008.6001,4009.6001,4010.8000,4011.8000,4012.8000,4013.8000,4014.8000,4015.80
};
// Pin deffinition
#define MAX_ELECTRODES_SUPPORTED 32 // The number of electrodes that the instrument hardware is capable of supporting
#define TOTAL_SHIFT_REGISTER_OUTPUTS MAX_ELECTRODES_SUPPORTED * 4 //Total number of outputs (relays) controllet trough the Shift registers
/*
// 74HC595 control pins !!! WARNING DO NOT USE THOSE PINS ON ESP FOR SHIFT REGISTERS BECAUSE THEY MAKE A CONFLICT WITH WIFI MODULE AND DON'T WORK PROPERLY
#define SER_Pin 25 // 14 pin on 74HC595 - Data 13
#define RCLK_Pin 33 // 12 pin on 74HC595 - Latch 12
#define SRCLK_Pin 32 // 11 pin on 74HC595 - Clock 14
*/
// 74HC595 control pins
#define SER_Pin 13 // 14 pin on 74HC595 - Data
#define RCLK_Pin 12 // 12 pin on 74HC595 - Latch
#define SRCLK_Pin 14 // 11 pin on 74HC595 - Clock
//Battery measurement
#define ADC_PIN 35 // Pin to witch voltage devider is connected
#define NUM_SAMPLES 100 // Number of samples to average
#define VOLTAGE_DIVIDER_MULTIPLIER 4.4208838204f // Ration of the voltage devider (Vs/Vout) Measured
float voltageSamples[NUM_SAMPLES];
int sampleIndex = 0;
int lastBatteryPercentage;
// Constants
const char* ssid = "AQUA"; // SSID for the ESP32 access point
const char* password = "password123"; // Password for the access point
const int port = 1234; // Port for communication
// Variables
int c1 = 0, c2 = 0, p1 = 0, p2 = 0; // Electrode positions
int probes; //Selected number of probes
float frequency;
bool paused = false; // Indicator for measurement pause
bool sentMeasuredValueActivation = false;
unsigned long sentMeasuredValueTimeStart ;
bool cleanOutputArray[TOTAL_SHIFT_REGISTER_OUTPUTS]; // Defines the array for clearing the output
bool outputSequenceArray[TOTAL_SHIFT_REGISTER_OUTPUTS]; // Defines tha array for setting the output values
WiFiServer server(port); // Create a server object
void setup() {
Serial.begin(115200);
// 74HC595 setup
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
clearShiftRegistersOutput(); // Clears the output of the shift registers
// Configure ESP32 as an access point
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
// Start the server
server.begin();
Serial.println("Server started.");
// Configure ADC
pinMode(ADC_PIN, INPUT);
analogReadResolution(12);
}
void loop() {
WiFiClient client = server.available(); // Check for a client connection
if (client) {
Serial.println("New client connected.");
while (client.connected()) {
// Checks if the client is sending data
if (client.available()) {
String command = client.readStringUntil('\n'); // Reads the whole line sent from the client
Serial.print("Received command: ");
Serial.println(command);
if (command.startsWith("POSITION")) {
c1 = 0, c2 = 0, p1 = 0, p2 = 0;
// Extract electrode positions from the command
sscanf(command.c_str(), "POSITIONC1=%d,C2=%d,P1=%d,P2=%d", &c1, &c2, &p1, &p2);
Serial.println("C1 =" + String(c1));
Serial.println("C2 =" + String(c2));
Serial.println("P1 =" + String(p1));
Serial.println("P2 =" + String(p2));
deployElectrodePositions(); //Sets relays on the positions of the Electrodes
} else if (command.startsWith("PROBES")) {
sscanf(command.c_str(), "PROBES%d", &probes); // Extracts the number of probes used
} else if (command.startsWith("FREQUENCY")) {
sscanf(command.c_str(), "FREQUENCY%d", &frequency); // Extracts the number of probes used
} else if (command.startsWith("PAUSE")) {
paused = true; // Pauses the process of sending back values to app
} else if (command.startsWith("RESUME")) {
paused = false; // Resumes the function that sends values back to app
} else if (command.startsWith("FINISH")) {
//Perform action for finishing the measurement
clearShiftRegistersOutput(); // Clears the output of the shift registers
} else {
client.println("Invalid command."); // Send error message for invalid commands
Serial.println("Invalid command."); // Send error message for invalid commands
}
}
// 1s after receiving command position it sents measured values to the software
if (!paused && sentMeasuredValueActivation && millis() - sentMeasuredValueTimeStart >= 1000) {
sentMeasuredValueActivation = false;
// Generate random numbers
float randomU = random(0, 3300); // Random number between 0 and 3300
float randomC = random(-5000, 5000) / 100.0; // Random number between -50.00 and 50.00
// Create a string with the random numbers
String values = "VALUESU=" + String(randomU, 2) + ",C=" + String(randomC, 2);
Serial.println(values);
// Send the string to the client
client.println(values);
//sentMeasuredValues();
}
int batteryPercentage = getBatteryPercentage(readBatteryVoltage());
if (batteryPercentage != lastBatteryPercentage) {
String stringBatteryPercentage = "BATTERY" + String(batteryPercentage);
// Send the string to the client
//Serial.println(stringBatteryPercentage);
client.println(stringBatteryPercentage);
lastBatteryPercentage = batteryPercentage;
}
}
// Close the connection
Serial.println("Client disconnected.");
client.stop();
}
}
// Custom Functions
void deployElectrodePositions() {
// Converting electrodes positions from numerical to binary sequence
String binaryPositionC1 = generateBinaryPosition(c1);
String binaryPositionC2 = generateBinaryPosition(c2);
String binaryPositionP1 = generateBinaryPosition(p1);
String binaryPositionP2 = generateBinaryPosition(p2);
String totalSequence = "";
// Adds zeros to the unused probes that are integrated in the hardware for example the hardware is capable of 32 probes but i only use 16
// and this for loop fills the shift registers with zeros to not be active
for(int emptyBytesCounter = 1; emptyBytesCounter <= (MAX_ELECTRODES_SUPPORTED - probes) / 2 ; emptyBytesCounter++) {
totalSequence = "11111111" + totalSequence;
}
for(int totalSequenceCounter = 1; totalSequenceCounter <= probes / 8 ; totalSequenceCounter++) { //Devides by 8 because the shift is only made one byte at a time
// P2
String partialBinaryPositionP2 = binaryPositionP2.substring(binaryPositionP2.length() - 8); // Extracts the last 8 bits and stores them in string
binaryPositionP2.remove(binaryPositionP2.length() - 8); // Removes the last 8 bits
totalSequence = partialBinaryPositionP2 + totalSequence;
// P1
String partialBinaryPositionP1 = binaryPositionP1.substring(binaryPositionP1.length() - 8);
binaryPositionP1.remove(binaryPositionP1.length() - 8);
totalSequence = partialBinaryPositionP1 + totalSequence;
// C2
String partialBinaryPositionC2 = binaryPositionC2.substring(binaryPositionC2.length() - 8);
binaryPositionC2.remove(binaryPositionC2.length() - 8);
totalSequence = partialBinaryPositionC2 + totalSequence;
// C1
String partialBinaryPositionC1 = binaryPositionC1.substring(binaryPositionC1.length() - 8);
binaryPositionC1.remove(binaryPositionC1.length() - 8);
totalSequence = partialBinaryPositionC1 + totalSequence;
}
// Converts the string into bool array
for (int arrayBitCounter = 0; arrayBitCounter < TOTAL_SHIFT_REGISTER_OUTPUTS; arrayBitCounter++) {
if(totalSequence[arrayBitCounter] == '1') {
outputSequenceArray[arrayBitCounter] = HIGH;
} else {
outputSequenceArray[arrayBitCounter] = LOW;
}
}
// Write register after being set
digitalWrite(RCLK_Pin, LOW); // Latch Low
for(int bitIndex = TOTAL_SHIFT_REGISTER_OUTPUTS - 1; bitIndex >= 0; bitIndex--){
digitalWrite(SRCLK_Pin, LOW); bool bitValue = outputSequenceArray[bitIndex]; // Clock Low
digitalWrite(SER_Pin, bitValue); // Data
digitalWrite(SRCLK_Pin, HIGH); // Clock High
}
digitalWrite(RCLK_Pin, HIGH); // Latch High
// IMPORTANT !!!
// The sequence by witch shift registers that are connected in order are connected to the probes C1 -> C2 -> P1 -> P2.
//Activates the sentMeasuredValues() funtion by starting the timer and changing the activation state
sentMeasuredValueActivation = true;
sentMeasuredValueTimeStart = millis();
}
//Converts the numerical position of the electrode to the string of zeroes and ones
String generateBinaryPosition (int electrodePosition) {
String binaryString = "";
for (int byteSequence = 1; byteSequence <= probes / 8; byteSequence++ ){
binaryString += "11111111";
}
binaryString.setCharAt(electrodePosition - 1, '0'); // At a electrode position changes the 1 to 0
return binaryString;
}
void clearShiftRegistersOutput() {
//THIS CODE IS TEMPORARY, MUST BE FIXED WITH FUNCTIONS!!!
// Populating clearing sequence with values
for (int arrayBitCounter = 0; arrayBitCounter < TOTAL_SHIFT_REGISTER_OUTPUTS; arrayBitCounter++) {
cleanOutputArray[arrayBitCounter] = HIGH;
}
// Writes the cleaning sequence to the outputs (clears the output)
digitalWrite(RCLK_Pin, LOW); // Latch Low
for(int bitIndex = TOTAL_SHIFT_REGISTER_OUTPUTS - 1; bitIndex >= 0; bitIndex--){
digitalWrite(SRCLK_Pin, LOW); bool bitValue = cleanOutputArray[bitIndex]; // Clock Low
digitalWrite(SER_Pin, bitValue); // Data
digitalWrite(SRCLK_Pin, HIGH); // Clock High
}
digitalWrite(RCLK_Pin, HIGH); // Latch High
}
float readBatteryVoltage() {
int rawReading = analogRead(ADC_PIN); // read value from ADC
float calibratedReading = ADC_LUT[rawReading]; // get the calibrated value from LUT
float rawVoltage = 0.04 + calibratedReading * (3.17 / 4096.0); // Adjust 3.3 to your reference voltage
//Serial.print("Raw Voltage = ");
//Serial.print(rawVoltage*1000);
// Store the raw voltage in the samples array
voltageSamples[sampleIndex] = rawVoltage;
sampleIndex = (sampleIndex + 1) % NUM_SAMPLES;
// Sort the samples array
float sortedSamples[NUM_SAMPLES];
memcpy(sortedSamples, voltageSamples, NUM_SAMPLES * sizeof(float));
std::sort(sortedSamples, sortedSamples + NUM_SAMPLES);
// Trim the top and bottom x% of the sorted samples
int trimPercent = 20; // Adjust as needed
int trimCount = NUM_SAMPLES * trimPercent / 100;
float sum = 0.0;
for (int i = trimCount; i < NUM_SAMPLES - trimCount; i++) {
sum += sortedSamples[i];
}
// Calculate the average of the trimmed samples
float trimmedAverageVoltage = sum / (NUM_SAMPLES - 2 * trimCount);
//Serial.print("Trimmed Voltage = ");
//Serial.print(",");
//Serial.println(trimmedAverageVoltage*1000);
// Convert the voltage to value after the voltage divider
float convertedTrimmedVoltage = trimmedAverageVoltage * VOLTAGE_DIVIDER_MULTIPLIER;
return convertedTrimmedVoltage;
}
int getBatteryPercentage(float batteryVoltage) {
// Voltage and percentage pairs
float voltageLevels[] = {13.00, 12.75, 12.50, 12.30, 12.15, 12.05, 11.95, 11.81, 11.66, 11.51, 10.50};
int percentageLevels[] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0};
// Find the voltage range where the input voltage lies
int index = 0;
while (batteryVoltage < voltageLevels[index] && index < sizeof(voltageLevels) / sizeof(voltageLevels[0]) - 1) {
index++;
}
// Perform linear interpolation
float percentage = map(batteryVoltage * 100, voltageLevels[index] * 100, voltageLevels[index - 1] * 100, percentageLevels[index], percentageLevels[index - 1]);
// Ensure the percentage is within the valid range
percentage = constrain(percentage, 0, 100);
return (int)percentage;
}