From 791d449b6d90013d0befb16c4eb758dc4f8d3f5a Mon Sep 17 00:00:00 2001
From: Huang <huang@eurecom.fr>
Date: Tue, 25 Feb 2014 08:23:00 +0000
Subject: [PATCH] Resampling module for USRP. Not completed. In progress.

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5085 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 .../ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc  |   23 +
 .../USRP/USERSPACE/LIB/coeff_25_to_3072.h     |    1 +
 .../USRP/USERSPACE/LIB/coeff_3072_to_25.h     |    1 +
 targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h     |   20 +
 .../USERSPACE/LIB/lte-softmodem-usrp_tmp.c    | 1360 +++++++++++++++++
 .../USRP/USERSPACE/LIB/openair_usrp_tmp.cpp   |  436 ++++++
 .../USRP/USERSPACE/LIB/polyphaseResample.cpp  |   61 +
 .../USRP/USERSPACE/LIB/polyphaseResample.h    |   26 +
 8 files changed, 1928 insertions(+)
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/coeff_25_to_3072.h
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/coeff_3072_to_25.h
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/lte-softmodem-usrp_tmp.c
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/openair_usrp_tmp.cpp
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp
 create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.h

diff --git a/targets/ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc b/targets/ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc
new file mode 100644
index 00000000000..c9b1087da17
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/Makefile_tmp.inc
@@ -0,0 +1,23 @@
+# compiles the openair_usrp
+
+#OPENAIRTARGETS_DIR ?=../../../..
+
+#OPENAIROBJS += $(OPENAIRTARGETS_DIR)/ARCH/USRP/USERSPACE/LIB/openair0_lib.o
+#CFLAGS += -I$(OPENAIRTARGETS_DIR)/ARCH/USRP/USERSPACE/LIB -I$(OPENAIRTARGETS_DIR)/ARCH/USRP/DEFS
+
+
+#example: example.o $(OPENAIROBJS) 
+#	gcc -o $@ $(CFLAGS) -lm $(OPENAIROBJS) $<
+
+#openair_usrp.o:
+#	$(CXX) -c openair_usrp.cpp -o openair_usrp.o
+
+#clean:
+#	rm -f *.o *~
+#a	rm -f example
+
+USRP_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/openair_usrp.o
+PPS_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/polyphaseResample.o
+USRP_FILE_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/openair_usrp.cpp
+PPS_FILE_OBJ += $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp
+USRP_CFLAGS += -I$(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/coeff_25_to_3072.h b/targets/ARCH/USRP/USERSPACE/LIB/coeff_25_to_3072.h
new file mode 100644
index 00000000000..5310ea55994
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/coeff_25_to_3072.h
@@ -0,0 +1 @@
+short coeff_25_to_3072[] = {26,25,25,25,25,25,25,25,25,25,25,24,24,24,24,24,24,24,24,24,23,23,23,23,23,23,23,23,23,22,22,22,22,22,22,22,22,21,21,21,21,21,21,21,21,20,20,20,20,20,20,20,19,19,19,19,19,19,19,18,18,18,18,18,18,17,17,17,17,17,17,17,16,16,16,16,16,16,15,15,15,15,15,15,14,14,14,14,14,13,13,13,13,13,13,12,12,12,12,12,11,11,11,11,11,11,10,10,10,10,10,9,9,9,9,9,8,8,8,8,8,7,7,7,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,1,1,1,1,0,0,0,0,-0,-0,-0,-0,-0,-1,-1,-1,-1,-2,-2,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5,-6,-6,-6,-7,-7,-7,-7,-8,-8,-8,-8,-9,-9,-9,-9,-10,-10,-10,-11,-11,-11,-11,-12,-12,-12,-12,-13,-13,-13,-14,-14,-14,-14,-15,-15,-15,-16,-16,-16,-16,-17,-17,-17,-18,-18,-18,-18,-19,-19,-19,-20,-20,-20,-20,-21,-21,-21,-22,-22,-22,-23,-23,-23,-23,-24,-24,-24,-25,-25,-25,-26,-26,-26,-27,-27,-27,-27,-28,-28,-28,-29,-29,-29,-30,-30,-30,-31,-31,-31,-32,-32,-32,-32,-33,-33,-33,-34,-34,-34,-35,-35,-35,-36,-36,-36,-37,-37,-37,-38,-38,-38,-39,-39,-39,-40,-40,-40,-41,-41,-41,-41,-42,-42,-42,-43,-43,-43,-44,-44,-44,-45,-45,-45,-46,-46,-46,-47,-47,-47,-48,-48,-48,-49,-49,-49,-50,-50,-50,-51,-51,-51,-52,-52,-52,-53,-53,-53,-54,-54,-54,-55,-55,-55,-56,-56,-56,-57,-57,-57,-58,-58,-58,-59,-59,-59,-60,-60,-60,-61,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-65,-65,-65,-66,-66,-66,-67,-67,-67,-68,-68,-68,-69,-69,-69,-70,-70,-70,-71,-71,-71,-72,-72,-72,-73,-73,-73,-74,-74,-74,-74,-75,-75,-75,-76,-76,-76,-77,-77,-77,-78,-78,-78,-79,-79,-79,-80,-80,-80,-81,-81,-81,-81,-82,-82,-82,-83,-83,-83,-84,-84,-84,-85,-85,-85,-86,-86,-86,-86,-87,-87,-87,-88,-88,-88,-89,-89,-89,-89,-90,-90,-90,-91,-91,-91,-91,-92,-92,-92,-93,-93,-93,-93,-94,-94,-94,-95,-95,-95,-95,-96,-96,-96,-97,-97,-97,-97,-98,-98,-98,-98,-99,-99,-99,-100,-100,-100,-100,-101,-101,-101,-101,-102,-102,-102,-102,-103,-103,-103,-103,-104,-104,-104,-104,-105,-105,-105,-105,-106,-106,-106,-106,-106,-107,-107,-107,-107,-108,-108,-108,-108,-109,-109,-109,-109,-109,-110,-110,-110,-110,-110,-111,-111,-111,-111,-111,-112,-112,-112,-112,-112,-113,-113,-113,-113,-113,-114,-114,-114,-114,-114,-115,-115,-115,-115,-115,-115,-116,-116,-116,-116,-116,-116,-117,-117,-117,-117,-117,-117,-117,-118,-118,-118,-118,-118,-118,-118,-119,-119,-119,-119,-119,-119,-119,-120,-120,-120,-120,-120,-120,-120,-120,-120,-121,-121,-121,-121,-121,-121,-121,-121,-121,-121,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-121,-121,-121,-121,-121,-121,-121,-121,-121,-120,-120,-120,-120,-120,-120,-120,-120,-119,-119,-119,-119,-119,-119,-119,-118,-118,-118,-118,-118,-118,-117,-117,-117,-117,-117,-117,-116,-116,-116,-116,-116,-115,-115,-115,-115,-115,-114,-114,-114,-114,-114,-113,-113,-113,-113,-112,-112,-112,-112,-111,-111,-111,-111,-110,-110,-110,-110,-109,-109,-109,-109,-108,-108,-108,-107,-107,-107,-107,-106,-106,-106,-105,-105,-105,-105,-104,-104,-104,-103,-103,-103,-102,-102,-102,-101,-101,-101,-100,-100,-100,-99,-99,-99,-98,-98,-97,-97,-97,-96,-96,-96,-95,-95,-94,-94,-94,-93,-93,-92,-92,-92,-91,-91,-90,-90,-90,-89,-89,-88,-88,-87,-87,-87,-86,-86,-85,-85,-84,-84,-83,-83,-83,-82,-82,-81,-81,-80,-80,-79,-79,-78,-78,-77,-77,-76,-76,-75,-75,-74,-74,-73,-73,-72,-72,-71,-71,-70,-70,-69,-69,-68,-68,-67,-67,-66,-65,-65,-64,-64,-63,-63,-62,-62,-61,-60,-60,-59,-59,-58,-58,-57,-56,-56,-55,-55,-54,-53,-53,-52,-52,-51,-50,-50,-49,-49,-48,-47,-47,-46,-45,-45,-44,-44,-43,-42,-42,-41,-40,-40,-39,-38,-38,-37,-36,-36,-35,-34,-34,-33,-32,-32,-31,-30,-30,-29,-28,-28,-27,-26,-25,-25,-24,-23,-23,-22,-21,-21,-20,-19,-18,-18,-17,-16,-16,-15,-14,-13,-13,-12,-11,-10,-10,-9,-8,-7,-7,-6,-5,-4,-4,-3,-2,-1,-1,-0,0,1,2,2,3,4,5,5,6,7,8,9,9,10,11,12,13,13,14,15,16,17,17,18,19,20,21,21,22,23,24,25,26,26,27,28,29,30,30,31,32,33,34,35,36,36,37,38,39,40,41,41,42,43,44,45,46,47,47,48,49,50,51,52,53,53,54,55,56,57,58,59,60,60,61,62,63,64,65,66,67,68,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,85,86,87,88,89,90,91,92,93,94,94,95,96,97,98,99,100,101,102,103,104,105,105,106,107,108,109,110,111,112,113,114,115,115,116,117,118,119,120,121,122,123,124,125,126,126,127,128,129,130,131,132,133,134,135,136,137,137,138,139,140,141,142,143,144,145,146,147,148,148,149,150,151,152,153,154,155,156,157,158,158,159,160,161,162,163,164,165,166,167,167,168,169,170,171,172,173,174,175,176,176,177,178,179,180,181,182,183,184,184,185,186,187,188,189,190,191,191,192,193,194,195,196,197,197,198,199,200,201,202,203,203,204,205,206,207,208,209,209,210,211,212,213,214,214,215,216,217,218,219,219,220,221,222,223,223,224,225,226,227,228,228,229,230,231,231,232,233,234,235,235,236,237,238,239,239,240,241,242,242,243,244,245,245,246,247,248,248,249,250,251,251,252,253,253,254,255,256,256,257,258,258,259,260,261,261,262,263,263,264,265,265,266,267,267,268,269,269,270,271,271,272,273,273,274,275,275,276,276,277,278,278,279,279,280,281,281,282,282,283,284,284,285,285,286,286,287,288,288,289,289,290,290,291,291,292,292,293,294,294,295,295,296,296,297,297,298,298,299,299,299,300,300,301,301,302,302,303,303,304,304,304,305,305,306,306,306,307,307,308,308,308,309,309,310,310,310,311,311,311,312,312,312,313,313,313,314,314,314,315,315,315,316,316,316,316,317,317,317,317,318,318,318,318,319,319,319,319,320,320,320,320,320,321,321,321,321,321,321,322,322,322,322,322,322,322,323,323,323,323,323,323,323,323,323,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,323,323,323,323,323,323,323,323,323,322,322,322,322,322,322,321,321,321,321,321,321,320,320,320,320,319,319,319,319,319,318,318,318,317,317,317,317,316,316,316,315,315,315,314,314,314,313,313,313,312,312,312,311,311,310,310,310,309,309,308,308,307,307,307,306,306,305,305,304,304,303,303,302,302,301,301,300,300,299,299,298,297,297,296,296,295,295,294,293,293,292,292,291,290,290,289,288,288,287,286,286,285,284,284,283,282,282,281,280,279,279,278,277,276,276,275,274,273,273,272,271,270,269,269,268,267,266,265,264,264,263,262,261,260,259,258,257,257,256,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,222,221,220,219,218,217,216,215,213,212,211,210,209,208,206,205,204,203,202,200,199,198,197,195,194,193,192,190,189,188,187,185,184,183,182,180,179,178,176,175,174,172,171,170,168,167,166,164,163,161,160,159,157,156,154,153,152,150,149,147,146,144,143,142,140,139,137,136,134,133,131,130,128,127,125,124,122,121,119,118,116,115,113,111,110,108,107,105,104,102,100,99,97,96,94,92,91,89,88,86,84,83,81,79,78,76,74,73,71,69,68,66,64,63,61,59,58,56,54,52,51,49,47,46,44,42,40,39,37,35,33,31,30,28,26,24,23,21,19,17,15,14,12,10,8,6,4,3,1,-0,-2,-4,-6,-7,-9,-11,-13,-15,-17,-19,-20,-22,-24,-26,-28,-30,-32,-34,-36,-37,-39,-41,-43,-45,-47,-49,-51,-53,-55,-57,-59,-60,-62,-64,-66,-68,-70,-72,-74,-76,-78,-80,-82,-84,-86,-88,-90,-92,-94,-96,-98,-100,-102,-104,-106,-108,-110,-112,-114,-116,-118,-120,-122,-124,-126,-128,-130,-132,-134,-136,-138,-140,-142,-144,-146,-148,-150,-152,-154,-156,-158,-160,-162,-164,-166,-168,-171,-173,-175,-177,-179,-181,-183,-185,-187,-189,-191,-193,-195,-197,-199,-201,-203,-205,-207,-210,-212,-214,-216,-218,-220,-222,-224,-226,-228,-230,-232,-234,-236,-238,-241,-243,-245,-247,-249,-251,-253,-255,-257,-259,-261,-263,-265,-267,-269,-272,-274,-276,-278,-280,-282,-284,-286,-288,-290,-292,-294,-296,-298,-300,-302,-304,-306,-309,-311,-313,-315,-317,-319,-321,-323,-325,-327,-329,-331,-333,-335,-337,-339,-341,-343,-345,-347,-349,-351,-353,-355,-357,-359,-361,-363,-365,-367,-369,-371,-373,-375,-377,-379,-381,-383,-385,-387,-389,-391,-393,-395,-397,-399,-401,-403,-405,-407,-409,-411,-413,-414,-416,-418,-420,-422,-424,-426,-428,-430,-432,-434,-436,-437,-439,-441,-443,-445,-447,-449,-451,-453,-454,-456,-458,-460,-462,-464,-465,-467,-469,-471,-473,-475,-476,-478,-480,-482,-484,-485,-487,-489,-491,-493,-494,-496,-498,-500,-501,-503,-505,-507,-508,-510,-512,-513,-515,-517,-519,-520,-522,-524,-525,-527,-529,-530,-532,-534,-535,-537,-539,-540,-542,-543,-545,-547,-548,-550,-551,-553,-555,-556,-558,-559,-561,-562,-564,-565,-567,-568,-570,-571,-573,-574,-576,-577,-579,-580,-582,-583,-585,-586,-588,-589,-590,-592,-593,-595,-596,-597,-599,-600,-602,-603,-604,-606,-607,-608,-610,-611,-612,-614,-615,-616,-617,-619,-620,-621,-622,-624,-625,-626,-627,-628,-630,-631,-632,-633,-634,-636,-637,-638,-639,-640,-641,-642,-643,-644,-646,-647,-648,-649,-650,-651,-652,-653,-654,-655,-656,-657,-658,-659,-660,-661,-662,-663,-664,-664,-665,-666,-667,-668,-669,-670,-671,-671,-672,-673,-674,-675,-676,-676,-677,-678,-679,-679,-680,-681,-682,-682,-683,-684,-684,-685,-686,-686,-687,-688,-688,-689,-689,-690,-691,-691,-692,-692,-693,-693,-694,-694,-695,-695,-696,-696,-697,-697,-698,-698,-698,-699,-699,-700,-700,-700,-701,-701,-701,-702,-702,-702,-703,-703,-703,-703,-704,-704,-704,-704,-705,-705,-705,-705,-705,-705,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-705,-705,-705,-705,-705,-705,-704,-704,-704,-704,-703,-703,-703,-703,-702,-702,-702,-701,-701,-701,-700,-700,-699,-699,-699,-698,-698,-697,-697,-696,-696,-695,-695,-694,-694,-693,-693,-692,-691,-691,-690,-690,-689,-688,-688,-687,-686,-686,-685,-684,-683,-683,-682,-681,-680,-679,-679,-678,-677,-676,-675,-674,-674,-673,-672,-671,-670,-669,-668,-667,-666,-665,-664,-663,-662,-661,-660,-659,-658,-657,-656,-654,-653,-652,-651,-650,-649,-647,-646,-645,-644,-643,-641,-640,-639,-637,-636,-635,-633,-632,-631,-629,-628,-627,-625,-624,-622,-621,-619,-618,-616,-615,-613,-612,-610,-609,-607,-606,-604,-603,-601,-599,-598,-596,-594,-593,-591,-589,-588,-586,-584,-582,-581,-579,-577,-575,-573,-572,-570,-568,-566,-564,-562,-560,-559,-557,-555,-553,-551,-549,-547,-545,-543,-541,-539,-537,-535,-533,-531,-528,-526,-524,-522,-520,-518,-516,-514,-511,-509,-507,-505,-502,-500,-498,-496,-493,-491,-489,-486,-484,-482,-479,-477,-475,-472,-470,-468,-465,-463,-460,-458,-455,-453,-450,-448,-445,-443,-440,-438,-435,-432,-430,-427,-425,-422,-419,-417,-414,-411,-409,-406,-403,-401,-398,-395,-392,-390,-387,-384,-381,-379,-376,-373,-370,-367,-364,-362,-359,-356,-353,-350,-347,-344,-341,-338,-335,-332,-329,-326,-323,-320,-317,-314,-311,-308,-305,-302,-299,-296,-293,-290,-287,-283,-280,-277,-274,-271,-268,-264,-261,-258,-255,-251,-248,-245,-242,-238,-235,-232,-229,-225,-222,-219,-215,-212,-209,-205,-202,-198,-195,-192,-188,-185,-181,-178,-174,-171,-168,-164,-161,-157,-154,-150,-147,-143,-139,-136,-132,-129,-125,-122,-118,-115,-111,-107,-104,-100,-96,-93,-89,-86,-82,-78,-74,-71,-67,-63,-60,-56,-52,-49,-45,-41,-37,-34,-30,-26,-22,-18,-15,-11,-7,-3,0,3,7,11,15,19,23,27,30,34,38,42,46,50,54,58,62,66,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,174,178,182,186,190,194,198,202,206,210,214,218,223,227,231,235,239,243,247,251,256,260,264,268,272,276,280,285,289,293,297,301,305,310,314,318,322,326,330,335,339,343,347,351,356,360,364,368,372,377,381,385,389,393,398,402,406,410,414,419,423,427,431,435,440,444,448,452,456,461,465,469,473,478,482,486,490,494,499,503,507,511,515,520,524,528,532,536,541,545,549,553,557,562,566,570,574,578,582,587,591,595,599,603,608,612,616,620,624,628,632,637,641,645,649,653,657,661,666,670,674,678,682,686,690,694,698,703,707,711,715,719,723,727,731,735,739,743,747,751,755,759,763,767,771,775,779,783,787,791,795,799,803,807,811,815,819,823,827,831,835,839,843,846,850,854,858,862,866,870,874,877,881,885,889,893,896,900,904,908,912,915,919,923,927,930,934,938,941,945,949,952,956,960,963,967,971,974,978,982,985,989,992,996,999,1003,1007,1010,1014,1017,1021,1024,1028,1031,1034,1038,1041,1045,1048,1052,1055,1058,1062,1065,1068,1072,1075,1078,1082,1085,1088,1092,1095,1098,1101,1104,1108,1111,1114,1117,1120,1124,1127,1130,1133,1136,1139,1142,1145,1148,1151,1154,1157,1160,1163,1166,1169,1172,1175,1178,1181,1184,1187,1189,1192,1195,1198,1201,1204,1206,1209,1212,1215,1217,1220,1223,1225,1228,1231,1233,1236,1238,1241,1244,1246,1249,1251,1254,1256,1259,1261,1264,1266,1268,1271,1273,1275,1278,1280,1282,1285,1287,1289,1292,1294,1296,1298,1300,1302,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1338,1340,1342,1344,1346,1347,1349,1351,1352,1354,1356,1357,1359,1361,1362,1364,1365,1367,1368,1370,1371,1373,1374,1376,1377,1378,1380,1381,1382,1384,1385,1386,1388,1389,1390,1391,1392,1393,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1405,1406,1407,1408,1409,1410,1410,1411,1412,1413,1413,1414,1415,1415,1416,1416,1417,1417,1418,1418,1419,1419,1420,1420,1421,1421,1421,1422,1422,1422,1422,1423,1423,1423,1423,1423,1423,1424,1424,1424,1424,1424,1424,1424,1424,1423,1423,1423,1423,1423,1423,1422,1422,1422,1422,1421,1421,1421,1420,1420,1419,1419,1418,1418,1417,1417,1416,1416,1415,1414,1414,1413,1412,1412,1411,1410,1409,1408,1408,1407,1406,1405,1404,1403,1402,1401,1400,1399,1398,1397,1396,1394,1393,1392,1391,1389,1388,1387,1386,1384,1383,1381,1380,1378,1377,1375,1374,1372,1371,1369,1368,1366,1364,1363,1361,1359,1357,1356,1354,1352,1350,1348,1346,1344,1342,1340,1338,1336,1334,1332,1330,1328,1326,1323,1321,1319,1317,1314,1312,1310,1307,1305,1302,1300,1298,1295,1293,1290,1287,1285,1282,1280,1277,1274,1272,1269,1266,1263,1260,1258,1255,1252,1249,1246,1243,1240,1237,1234,1231,1228,1225,1222,1218,1215,1212,1209,1205,1202,1199,1196,1192,1189,1185,1182,1178,1175,1172,1168,1164,1161,1157,1154,1150,1146,1143,1139,1135,1131,1127,1124,1120,1116,1112,1108,1104,1100,1096,1092,1088,1084,1080,1076,1072,1067,1063,1059,1055,1051,1046,1042,1038,1033,1029,1024,1020,1015,1011,1007,1002,997,993,988,984,979,974,970,965,960,955,951,946,941,936,931,926,921,916,911,906,901,896,891,886,881,876,871,866,860,855,850,845,839,834,829,823,818,812,807,801,796,790,785,779,774,768,763,757,751,746,740,734,729,723,717,711,705,699,694,688,682,676,670,664,658,652,646,640,634,628,621,615,609,603,597,590,584,578,572,565,559,553,546,540,533,527,521,514,508,501,495,488,481,475,468,462,455,448,442,435,428,421,415,408,401,394,387,381,374,367,360,353,346,339,332,325,318,311,304,297,290,283,276,269,261,254,247,240,233,225,218,211,204,196,189,182,174,167,159,152,145,137,130,122,115,107,100,92,85,77,70,62,54,47,39,32,24,16,9,1,-6,-14,-21,-29,-37,-45,-52,-60,-68,-76,-84,-92,-99,-107,-115,-123,-131,-139,-147,-155,-163,-171,-179,-187,-195,-203,-211,-219,-227,-235,-243,-251,-259,-268,-276,-284,-292,-300,-308,-317,-325,-333,-341,-349,-358,-366,-374,-382,-391,-399,-407,-415,-424,-432,-440,-449,-457,-465,-474,-482,-490,-499,-507,-516,-524,-532,-541,-549,-558,-566,-575,-583,-591,-600,-608,-617,-625,-634,-642,-651,-659,-668,-676,-685,-693,-702,-710,-719,-727,-736,-744,-753,-762,-770,-779,-787,-796,-804,-813,-822,-830,-839,-847,-856,-864,-873,-882,-890,-899,-907,-916,-925,-933,-942,-950,-959,-968,-976,-985,-994,-1002,-1011,-1019,-1028,-1037,-1045,-1054,-1062,-1071,-1080,-1088,-1097,-1105,-1114,-1123,-1131,-1140,-1148,-1157,-1166,-1174,-1183,-1191,-1200,-1209,-1217,-1226,-1234,-1243,-1251,-1260,-1269,-1277,-1286,-1294,-1303,-1311,-1320,-1328,-1337,-1345,-1354,-1362,-1371,-1379,-1388,-1396,-1405,-1413,-1422,-1430,-1439,-1447,-1456,-1464,-1472,-1481,-1489,-1498,-1506,-1514,-1523,-1531,-1540,-1548,-1556,-1565,-1573,-1581,-1590,-1598,-1606,-1614,-1623,-1631,-1639,-1647,-1656,-1664,-1672,-1680,-1688,-1697,-1705,-1713,-1721,-1729,-1737,-1745,-1754,-1762,-1770,-1778,-1786,-1794,-1802,-1810,-1818,-1826,-1834,-1842,-1850,-1858,-1866,-1874,-1881,-1889,-1897,-1905,-1913,-1921,-1928,-1936,-1944,-1952,-1959,-1967,-1975,-1983,-1990,-1998,-2006,-2013,-2021,-2028,-2036,-2043,-2051,-2059,-2066,-2074,-2081,-2088,-2096,-2103,-2111,-2118,-2125,-2133,-2140,-2147,-2155,-2162,-2169,-2176,-2183,-2191,-2198,-2205,-2212,-2219,-2226,-2233,-2240,-2247,-2254,-2261,-2268,-2275,-2282,-2289,-2296,-2303,-2309,-2316,-2323,-2330,-2336,-2343,-2350,-2356,-2363,-2370,-2376,-2383,-2389,-2396,-2402,-2409,-2415,-2421,-2428,-2434,-2440,-2447,-2453,-2459,-2465,-2472,-2478,-2484,-2490,-2496,-2502,-2508,-2514,-2520,-2526,-2532,-2538,-2544,-2550,-2555,-2561,-2567,-2573,-2578,-2584,-2590,-2595,-2601,-2606,-2612,-2617,-2623,-2628,-2634,-2639,-2644,-2650,-2655,-2660,-2665,-2670,-2676,-2681,-2686,-2691,-2696,-2701,-2706,-2711,-2716,-2720,-2725,-2730,-2735,-2739,-2744,-2749,-2753,-2758,-2762,-2767,-2771,-2776,-2780,-2785,-2789,-2793,-2798,-2802,-2806,-2810,-2814,-2818,-2822,-2826,-2830,-2834,-2838,-2842,-2846,-2850,-2854,-2857,-2861,-2865,-2868,-2872,-2875,-2879,-2882,-2886,-2889,-2892,-2896,-2899,-2902,-2905,-2909,-2912,-2915,-2918,-2921,-2924,-2927,-2930,-2932,-2935,-2938,-2941,-2943,-2946,-2949,-2951,-2954,-2956,-2958,-2961,-2963,-2966,-2968,-2970,-2972,-2974,-2976,-2978,-2980,-2982,-2984,-2986,-2988,-2990,-2992,-2993,-2995,-2997,-2998,-3000,-3001,-3003,-3004,-3005,-3007,-3008,-3009,-3010,-3011,-3012,-3014,-3015,-3015,-3016,-3017,-3018,-3019,-3020,-3020,-3021,-3021,-3022,-3022,-3023,-3023,-3024,-3024,-3024,-3024,-3025,-3025,-3025,-3025,-3025,-3025,-3025,-3024,-3024,-3024,-3024,-3023,-3023,-3022,-3022,-3021,-3021,-3020,-3019,-3019,-3018,-3017,-3016,-3015,-3014,-3013,-3012,-3011,-3010,-3008,-3007,-3006,-3004,-3003,-3001,-3000,-2998,-2996,-2995,-2993,-2991,-2989,-2987,-2985,-2983,-2981,-2979,-2977,-2975,-2973,-2970,-2968,-2966,-2963,-2961,-2958,-2955,-2953,-2950,-2947,-2944,-2941,-2938,-2935,-2932,-2929,-2926,-2923,-2920,-2916,-2913,-2910,-2906,-2903,-2899,-2895,-2892,-2888,-2884,-2880,-2876,-2872,-2868,-2864,-2860,-2856,-2852,-2847,-2843,-2839,-2834,-2830,-2825,-2821,-2816,-2811,-2806,-2802,-2797,-2792,-2787,-2782,-2777,-2771,-2766,-2761,-2756,-2750,-2745,-2739,-2734,-2728,-2722,-2717,-2711,-2705,-2699,-2693,-2687,-2681,-2675,-2669,-2663,-2656,-2650,-2644,-2637,-2631,-2624,-2618,-2611,-2604,-2597,-2591,-2584,-2577,-2570,-2563,-2555,-2548,-2541,-2534,-2526,-2519,-2512,-2504,-2496,-2489,-2481,-2473,-2465,-2458,-2450,-2442,-2434,-2426,-2417,-2409,-2401,-2393,-2384,-2376,-2367,-2359,-2350,-2341,-2333,-2324,-2315,-2306,-2297,-2288,-2279,-2270,-2261,-2252,-2242,-2233,-2223,-2214,-2204,-2195,-2185,-2175,-2166,-2156,-2146,-2136,-2126,-2116,-2106,-2096,-2086,-2075,-2065,-2054,-2044,-2034,-2023,-2012,-2002,-1991,-1980,-1969,-1958,-1947,-1936,-1925,-1914,-1903,-1892,-1880,-1869,-1857,-1846,-1834,-1823,-1811,-1799,-1788,-1776,-1764,-1752,-1740,-1728,-1716,-1704,-1691,-1679,-1667,-1654,-1642,-1629,-1617,-1604,-1591,-1579,-1566,-1553,-1540,-1527,-1514,-1501,-1488,-1475,-1461,-1448,-1435,-1421,-1408,-1394,-1380,-1367,-1353,-1339,-1326,-1312,-1298,-1284,-1270,-1256,-1241,-1227,-1213,-1199,-1184,-1170,-1155,-1141,-1126,-1111,-1097,-1082,-1067,-1052,-1037,-1022,-1007,-992,-977,-962,-946,-931,-916,-900,-885,-869,-854,-838,-822,-807,-791,-775,-759,-743,-727,-711,-695,-678,-662,-646,-630,-613,-597,-580,-564,-547,-530,-514,-497,-480,-463,-446,-429,-412,-395,-378,-361,-343,-326,-309,-291,-274,-256,-239,-221,-204,-186,-168,-150,-132,-114,-96,-78,-60,-42,-24,-6,11,30,48,67,85,104,122,141,160,178,197,216,235,254,273,292,311,330,349,368,388,407,426,446,465,485,504,524,543,563,583,603,622,642,662,682,702,722,742,763,783,803,823,844,864,884,905,925,946,967,987,1008,1029,1050,1070,1091,1112,1133,1154,1175,1196,1217,1239,1260,1281,1302,1324,1345,1367,1388,1410,1431,1453,1474,1496,1518,1540,1561,1583,1605,1627,1649,1671,1693,1715,1737,1760,1782,1804,1826,1849,1871,1893,1916,1938,1961,1984,2006,2029,2051,2074,2097,2120,2143,2165,2188,2211,2234,2257,2280,2303,2326,2350,2373,2396,2419,2443,2466,2489,2513,2536,2560,2583,2607,2630,2654,2677,2701,2725,2748,2772,2796,2820,2844,2868,2891,2915,2939,2963,2987,3012,3036,3060,3084,3108,3132,3157,3181,3205,3230,3254,3278,3303,3327,3352,3376,3401,3425,3450,3475,3499,3524,3549,3573,3598,3623,3648,3673,3697,3722,3747,3772,3797,3822,3847,3872,3897,3922,3947,3973,3998,4023,4048,4073,4099,4124,4149,4174,4200,4225,4251,4276,4301,4327,4352,4378,4403,4429,4454,4480,4505,4531,4557,4582,4608,4634,4659,4685,4711,4736,4762,4788,4814,4840,4865,4891,4917,4943,4969,4995,5021,5047,5073,5099,5125,5151,5177,5203,5229,5255,5281,5307,5333,5359,5385,5411,5437,5464,5490,5516,5542,5568,5594,5621,5647,5673,5699,5726,5752,5778,5804,5831,5857,5883,5910,5936,5962,5988,6015,6041,6068,6094,6120,6147,6173,6199,6226,6252,6279,6305,6331,6358,6384,6411,6437,6463,6490,6516,6543,6569,6596,6622,6648,6675,6701,6728,6754,6781,6807,6833,6860,6886,6913,6939,6966,6992,7019,7045,7071,7098,7124,7151,7177,7204,7230,7256,7283,7309,7336,7362,7388,7415,7441,7467,7494,7520,7547,7573,7599,7626,7652,7678,7705,7731,7757,7783,7810,7836,7862,7889,7915,7941,7967,7993,8020,8046,8072,8098,8124,8150,8177,8203,8229,8255,8281,8307,8333,8359,8385,8411,8437,8463,8489,8515,8541,8567,8593,8619,8645,8671,8697,8722,8748,8774,8800,8826,8851,8877,8903,8928,8954,8980,9005,9031,9057,9082,9108,9133,9159,9184,9210,9235,9261,9286,9312,9337,9362,9388,9413,9438,9463,9489,9514,9539,9564,9589,9615,9640,9665,9690,9715,9740,9765,9790,9815,9839,9864,9889,9914,9939,9963,9988,10013,10037,10062,10087,10111,10136,10160,10185,10209,10234,10258,10282,10307,10331,10355,10380,10404,10428,10452,10476,10500,10524,10548,10572,10596,10620,10644,10668,10692,10716,10739,10763,10787,10810,10834,10857,10881,10904,10928,10951,10975,10998,11021,11045,11068,11091,11114,11137,11160,11183,11206,11229,11252,11275,11298,11321,11344,11366,11389,11412,11434,11457,11479,11502,11524,11547,11569,11591,11613,11636,11658,11680,11702,11724,11746,11768,11790,11812,11834,11855,11877,11899,11920,11942,11963,11985,12006,12028,12049,12070,12092,12113,12134,12155,12176,12197,12218,12239,12260,12281,12302,12322,12343,12364,12384,12405,12425,12446,12466,12486,12506,12527,12547,12567,12587,12607,12627,12647,12667,12686,12706,12726,12746,12765,12785,12804,12823,12843,12862,12881,12901,12920,12939,12958,12977,12996,13015,13033,13052,13071,13089,13108,13127,13145,13163,13182,13200,13218,13236,13255,13273,13291,13309,13326,13344,13362,13380,13397,13415,13432,13450,13467,13485,13502,13519,13536,13553,13570,13587,13604,13621,13638,13654,13671,13688,13704,13721,13737,13753,13770,13786,13802,13818,13834,13850,13866,13882,13898,13913,13929,13945,13960,13975,13991,14006,14021,14037,14052,14067,14082,14097,14111,14126,14141,14155,14170,14185,14199,14213,14228,14242,14256,14270,14284,14298,14312,14326,14340,14353,14367,14380,14394,14407,14421,14434,14447,14460,14473,14486,14499,14512,14525,14537,14550,14563,14575,14587,14600,14612,14624,14636,14648,14660,14672,14684,14696,14708,14719,14731,14742,14754,14765,14776,14787,14799,14810,14820,14831,14842,14853,14864,14874,14885,14895,14905,14916,14926,14936,14946,14956,14966,14976,14986,14995,15005,15015,15024,15033,15043,15052,15061,15070,15079,15088,15097,15106,15114,15123,15132,15140,15148,15157,15165,15173,15181,15189,15197,15205,15213,15220,15228,15236,15243,15250,15258,15265,15272,15279,15286,15293,15300,15307,15313,15320,15326,15333,15339,15346,15352,15358,15364,15370,15376,15382,15387,15393,15399,15404,15409,15415,15420,15425,15430,15435,15440,15445,15450,15455,15459,15464,15468,15473,15477,15481,15485,15489,15493,15497,15501,15505,15508,15512,15515,15519,15522,15525,15529,15532,15535,15538,15540,15543,15546,15548,15551,15553,15556,15558,15560,15562,15564,15566,15568,15570,15572,15573,15575,15576,15578,15579,15580,15581,15582,15583,15584,15585,15586,15586,15587,15588,15588,15588,15588,15589,15589,15589,15589,15588,15588,15588,15588,15587,15586,15586,15585,15584,15583,15582,15581,15580,15579,15578,15576,15575,15573,15572,15570,15568,15566,15564,15562,15560,15558,15556,15553,15551,15548,15546,15543,15540,15538,15535,15532,15529,15525,15522,15519,15515,15512,15508,15505,15501,15497,15493,15489,15485,15481,15477,15473,15468,15464,15459,15455,15450,15445,15440,15435,15430,15425,15420,15415,15409,15404,15399,15393,15387,15382,15376,15370,15364,15358,15352,15346,15339,15333,15326,15320,15313,15307,15300,15293,15286,15279,15272,15265,15258,15250,15243,15236,15228,15220,15213,15205,15197,15189,15181,15173,15165,15157,15148,15140,15132,15123,15114,15106,15097,15088,15079,15070,15061,15052,15043,15033,15024,15015,15005,14995,14986,14976,14966,14956,14946,14936,14926,14916,14905,14895,14885,14874,14864,14853,14842,14831,14820,14810,14799,14787,14776,14765,14754,14742,14731,14719,14708,14696,14684,14672,14660,14648,14636,14624,14612,14600,14587,14575,14563,14550,14537,14525,14512,14499,14486,14473,14460,14447,14434,14421,14407,14394,14380,14367,14353,14340,14326,14312,14298,14284,14270,14256,14242,14228,14213,14199,14185,14170,14155,14141,14126,14111,14097,14082,14067,14052,14037,14021,14006,13991,13975,13960,13945,13929,13913,13898,13882,13866,13850,13834,13818,13802,13786,13770,13753,13737,13721,13704,13688,13671,13654,13638,13621,13604,13587,13570,13553,13536,13519,13502,13485,13467,13450,13432,13415,13397,13380,13362,13344,13326,13309,13291,13273,13255,13236,13218,13200,13182,13163,13145,13127,13108,13089,13071,13052,13033,13015,12996,12977,12958,12939,12920,12901,12881,12862,12843,12823,12804,12785,12765,12746,12726,12706,12686,12667,12647,12627,12607,12587,12567,12547,12527,12506,12486,12466,12446,12425,12405,12384,12364,12343,12322,12302,12281,12260,12239,12218,12197,12176,12155,12134,12113,12092,12070,12049,12028,12006,11985,11963,11942,11920,11899,11877,11855,11834,11812,11790,11768,11746,11724,11702,11680,11658,11636,11613,11591,11569,11547,11524,11502,11479,11457,11434,11412,11389,11366,11344,11321,11298,11275,11252,11229,11206,11183,11160,11137,11114,11091,11068,11045,11021,10998,10975,10951,10928,10904,10881,10857,10834,10810,10787,10763,10739,10716,10692,10668,10644,10620,10596,10572,10548,10524,10500,10476,10452,10428,10404,10380,10355,10331,10307,10282,10258,10234,10209,10185,10160,10136,10111,10087,10062,10037,10013,9988,9963,9939,9914,9889,9864,9839,9815,9790,9765,9740,9715,9690,9665,9640,9615,9589,9564,9539,9514,9489,9463,9438,9413,9388,9362,9337,9312,9286,9261,9235,9210,9184,9159,9133,9108,9082,9057,9031,9005,8980,8954,8928,8903,8877,8851,8826,8800,8774,8748,8722,8697,8671,8645,8619,8593,8567,8541,8515,8489,8463,8437,8411,8385,8359,8333,8307,8281,8255,8229,8203,8177,8150,8124,8098,8072,8046,8020,7993,7967,7941,7915,7889,7862,7836,7810,7783,7757,7731,7705,7678,7652,7626,7599,7573,7547,7520,7494,7467,7441,7415,7388,7362,7336,7309,7283,7256,7230,7204,7177,7151,7124,7098,7071,7045,7019,6992,6966,6939,6913,6886,6860,6833,6807,6781,6754,6728,6701,6675,6648,6622,6596,6569,6543,6516,6490,6463,6437,6411,6384,6358,6331,6305,6279,6252,6226,6199,6173,6147,6120,6094,6068,6041,6015,5988,5962,5936,5910,5883,5857,5831,5804,5778,5752,5726,5699,5673,5647,5621,5594,5568,5542,5516,5490,5464,5437,5411,5385,5359,5333,5307,5281,5255,5229,5203,5177,5151,5125,5099,5073,5047,5021,4995,4969,4943,4917,4891,4865,4840,4814,4788,4762,4736,4711,4685,4659,4634,4608,4582,4557,4531,4505,4480,4454,4429,4403,4378,4352,4327,4301,4276,4251,4225,4200,4174,4149,4124,4099,4073,4048,4023,3998,3973,3947,3922,3897,3872,3847,3822,3797,3772,3747,3722,3697,3673,3648,3623,3598,3573,3549,3524,3499,3475,3450,3425,3401,3376,3352,3327,3303,3278,3254,3230,3205,3181,3157,3132,3108,3084,3060,3036,3012,2987,2963,2939,2915,2891,2868,2844,2820,2796,2772,2748,2725,2701,2677,2654,2630,2607,2583,2560,2536,2513,2489,2466,2443,2419,2396,2373,2350,2326,2303,2280,2257,2234,2211,2188,2165,2143,2120,2097,2074,2051,2029,2006,1984,1961,1938,1916,1893,1871,1849,1826,1804,1782,1760,1737,1715,1693,1671,1649,1627,1605,1583,1561,1540,1518,1496,1474,1453,1431,1410,1388,1367,1345,1324,1302,1281,1260,1239,1217,1196,1175,1154,1133,1112,1091,1070,1050,1029,1008,987,967,946,925,905,884,864,844,823,803,783,763,742,722,702,682,662,642,622,603,583,563,543,524,504,485,465,446,426,407,388,368,349,330,311,292,273,254,235,216,197,178,160,141,122,104,85,67,48,30,11,-6,-24,-42,-60,-78,-96,-114,-132,-150,-168,-186,-204,-221,-239,-256,-274,-291,-309,-326,-343,-361,-378,-395,-412,-429,-446,-463,-480,-497,-514,-530,-547,-564,-580,-597,-613,-630,-646,-662,-678,-695,-711,-727,-743,-759,-775,-791,-807,-822,-838,-854,-869,-885,-900,-916,-931,-946,-962,-977,-992,-1007,-1022,-1037,-1052,-1067,-1082,-1097,-1111,-1126,-1141,-1155,-1170,-1184,-1199,-1213,-1227,-1241,-1256,-1270,-1284,-1298,-1312,-1326,-1339,-1353,-1367,-1380,-1394,-1408,-1421,-1435,-1448,-1461,-1475,-1488,-1501,-1514,-1527,-1540,-1553,-1566,-1579,-1591,-1604,-1617,-1629,-1642,-1654,-1667,-1679,-1691,-1704,-1716,-1728,-1740,-1752,-1764,-1776,-1788,-1799,-1811,-1823,-1834,-1846,-1857,-1869,-1880,-1892,-1903,-1914,-1925,-1936,-1947,-1958,-1969,-1980,-1991,-2002,-2012,-2023,-2034,-2044,-2054,-2065,-2075,-2086,-2096,-2106,-2116,-2126,-2136,-2146,-2156,-2166,-2175,-2185,-2195,-2204,-2214,-2223,-2233,-2242,-2252,-2261,-2270,-2279,-2288,-2297,-2306,-2315,-2324,-2333,-2341,-2350,-2359,-2367,-2376,-2384,-2393,-2401,-2409,-2417,-2426,-2434,-2442,-2450,-2458,-2465,-2473,-2481,-2489,-2496,-2504,-2512,-2519,-2526,-2534,-2541,-2548,-2555,-2563,-2570,-2577,-2584,-2591,-2597,-2604,-2611,-2618,-2624,-2631,-2637,-2644,-2650,-2656,-2663,-2669,-2675,-2681,-2687,-2693,-2699,-2705,-2711,-2717,-2722,-2728,-2734,-2739,-2745,-2750,-2756,-2761,-2766,-2771,-2777,-2782,-2787,-2792,-2797,-2802,-2806,-2811,-2816,-2821,-2825,-2830,-2834,-2839,-2843,-2847,-2852,-2856,-2860,-2864,-2868,-2872,-2876,-2880,-2884,-2888,-2892,-2895,-2899,-2903,-2906,-2910,-2913,-2916,-2920,-2923,-2926,-2929,-2932,-2935,-2938,-2941,-2944,-2947,-2950,-2953,-2955,-2958,-2961,-2963,-2966,-2968,-2970,-2973,-2975,-2977,-2979,-2981,-2983,-2985,-2987,-2989,-2991,-2993,-2995,-2996,-2998,-3000,-3001,-3003,-3004,-3006,-3007,-3008,-3010,-3011,-3012,-3013,-3014,-3015,-3016,-3017,-3018,-3019,-3019,-3020,-3021,-3021,-3022,-3022,-3023,-3023,-3024,-3024,-3024,-3024,-3025,-3025,-3025,-3025,-3025,-3025,-3025,-3024,-3024,-3024,-3024,-3023,-3023,-3022,-3022,-3021,-3021,-3020,-3020,-3019,-3018,-3017,-3016,-3015,-3015,-3014,-3012,-3011,-3010,-3009,-3008,-3007,-3005,-3004,-3003,-3001,-3000,-2998,-2997,-2995,-2993,-2992,-2990,-2988,-2986,-2984,-2982,-2980,-2978,-2976,-2974,-2972,-2970,-2968,-2966,-2963,-2961,-2958,-2956,-2954,-2951,-2949,-2946,-2943,-2941,-2938,-2935,-2932,-2930,-2927,-2924,-2921,-2918,-2915,-2912,-2909,-2905,-2902,-2899,-2896,-2892,-2889,-2886,-2882,-2879,-2875,-2872,-2868,-2865,-2861,-2857,-2854,-2850,-2846,-2842,-2838,-2834,-2830,-2826,-2822,-2818,-2814,-2810,-2806,-2802,-2798,-2793,-2789,-2785,-2780,-2776,-2771,-2767,-2762,-2758,-2753,-2749,-2744,-2739,-2735,-2730,-2725,-2720,-2716,-2711,-2706,-2701,-2696,-2691,-2686,-2681,-2676,-2670,-2665,-2660,-2655,-2650,-2644,-2639,-2634,-2628,-2623,-2617,-2612,-2606,-2601,-2595,-2590,-2584,-2578,-2573,-2567,-2561,-2555,-2550,-2544,-2538,-2532,-2526,-2520,-2514,-2508,-2502,-2496,-2490,-2484,-2478,-2472,-2465,-2459,-2453,-2447,-2440,-2434,-2428,-2421,-2415,-2409,-2402,-2396,-2389,-2383,-2376,-2370,-2363,-2356,-2350,-2343,-2336,-2330,-2323,-2316,-2309,-2303,-2296,-2289,-2282,-2275,-2268,-2261,-2254,-2247,-2240,-2233,-2226,-2219,-2212,-2205,-2198,-2191,-2183,-2176,-2169,-2162,-2155,-2147,-2140,-2133,-2125,-2118,-2111,-2103,-2096,-2088,-2081,-2074,-2066,-2059,-2051,-2043,-2036,-2028,-2021,-2013,-2006,-1998,-1990,-1983,-1975,-1967,-1959,-1952,-1944,-1936,-1928,-1921,-1913,-1905,-1897,-1889,-1881,-1874,-1866,-1858,-1850,-1842,-1834,-1826,-1818,-1810,-1802,-1794,-1786,-1778,-1770,-1762,-1754,-1745,-1737,-1729,-1721,-1713,-1705,-1697,-1688,-1680,-1672,-1664,-1656,-1647,-1639,-1631,-1623,-1614,-1606,-1598,-1590,-1581,-1573,-1565,-1556,-1548,-1540,-1531,-1523,-1514,-1506,-1498,-1489,-1481,-1472,-1464,-1456,-1447,-1439,-1430,-1422,-1413,-1405,-1396,-1388,-1379,-1371,-1362,-1354,-1345,-1337,-1328,-1320,-1311,-1303,-1294,-1286,-1277,-1269,-1260,-1251,-1243,-1234,-1226,-1217,-1209,-1200,-1191,-1183,-1174,-1166,-1157,-1148,-1140,-1131,-1123,-1114,-1105,-1097,-1088,-1080,-1071,-1062,-1054,-1045,-1037,-1028,-1019,-1011,-1002,-994,-985,-976,-968,-959,-950,-942,-933,-925,-916,-907,-899,-890,-882,-873,-864,-856,-847,-839,-830,-822,-813,-804,-796,-787,-779,-770,-762,-753,-744,-736,-727,-719,-710,-702,-693,-685,-676,-668,-659,-651,-642,-634,-625,-617,-608,-600,-591,-583,-575,-566,-558,-549,-541,-532,-524,-516,-507,-499,-490,-482,-474,-465,-457,-449,-440,-432,-424,-415,-407,-399,-391,-382,-374,-366,-358,-349,-341,-333,-325,-317,-308,-300,-292,-284,-276,-268,-259,-251,-243,-235,-227,-219,-211,-203,-195,-187,-179,-171,-163,-155,-147,-139,-131,-123,-115,-107,-99,-92,-84,-76,-68,-60,-52,-45,-37,-29,-21,-14,-6,1,9,16,24,32,39,47,54,62,70,77,85,92,100,107,115,122,130,137,145,152,159,167,174,182,189,196,204,211,218,225,233,240,247,254,261,269,276,283,290,297,304,311,318,325,332,339,346,353,360,367,374,381,387,394,401,408,415,421,428,435,442,448,455,462,468,475,481,488,495,501,508,514,521,527,533,540,546,553,559,565,572,578,584,590,597,603,609,615,621,628,634,640,646,652,658,664,670,676,682,688,694,699,705,711,717,723,729,734,740,746,751,757,763,768,774,779,785,790,796,801,807,812,818,823,829,834,839,845,850,855,860,866,871,876,881,886,891,896,901,906,911,916,921,926,931,936,941,946,951,955,960,965,970,974,979,984,988,993,997,1002,1007,1011,1015,1020,1024,1029,1033,1038,1042,1046,1051,1055,1059,1063,1067,1072,1076,1080,1084,1088,1092,1096,1100,1104,1108,1112,1116,1120,1124,1127,1131,1135,1139,1143,1146,1150,1154,1157,1161,1164,1168,1172,1175,1178,1182,1185,1189,1192,1196,1199,1202,1205,1209,1212,1215,1218,1222,1225,1228,1231,1234,1237,1240,1243,1246,1249,1252,1255,1258,1260,1263,1266,1269,1272,1274,1277,1280,1282,1285,1287,1290,1293,1295,1298,1300,1302,1305,1307,1310,1312,1314,1317,1319,1321,1323,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1357,1359,1361,1363,1364,1366,1368,1369,1371,1372,1374,1375,1377,1378,1380,1381,1383,1384,1386,1387,1388,1389,1391,1392,1393,1394,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1408,1409,1410,1411,1412,1412,1413,1414,1414,1415,1416,1416,1417,1417,1418,1418,1419,1419,1420,1420,1421,1421,1421,1422,1422,1422,1422,1423,1423,1423,1423,1423,1423,1424,1424,1424,1424,1424,1424,1424,1424,1423,1423,1423,1423,1423,1423,1422,1422,1422,1422,1421,1421,1421,1420,1420,1419,1419,1418,1418,1417,1417,1416,1416,1415,1415,1414,1413,1413,1412,1411,1410,1410,1409,1408,1407,1406,1405,1405,1404,1403,1402,1401,1400,1399,1398,1397,1396,1395,1393,1392,1391,1390,1389,1388,1386,1385,1384,1382,1381,1380,1378,1377,1376,1374,1373,1371,1370,1368,1367,1365,1364,1362,1361,1359,1357,1356,1354,1352,1351,1349,1347,1346,1344,1342,1340,1338,1337,1335,1333,1331,1329,1327,1325,1323,1321,1319,1317,1315,1313,1311,1309,1307,1305,1302,1300,1298,1296,1294,1292,1289,1287,1285,1282,1280,1278,1275,1273,1271,1268,1266,1264,1261,1259,1256,1254,1251,1249,1246,1244,1241,1238,1236,1233,1231,1228,1225,1223,1220,1217,1215,1212,1209,1206,1204,1201,1198,1195,1192,1189,1187,1184,1181,1178,1175,1172,1169,1166,1163,1160,1157,1154,1151,1148,1145,1142,1139,1136,1133,1130,1127,1124,1120,1117,1114,1111,1108,1104,1101,1098,1095,1092,1088,1085,1082,1078,1075,1072,1068,1065,1062,1058,1055,1052,1048,1045,1041,1038,1034,1031,1028,1024,1021,1017,1014,1010,1007,1003,999,996,992,989,985,982,978,974,971,967,963,960,956,952,949,945,941,938,934,930,927,923,919,915,912,908,904,900,896,893,889,885,881,877,874,870,866,862,858,854,850,846,843,839,835,831,827,823,819,815,811,807,803,799,795,791,787,783,779,775,771,767,763,759,755,751,747,743,739,735,731,727,723,719,715,711,707,703,698,694,690,686,682,678,674,670,666,661,657,653,649,645,641,637,632,628,624,620,616,612,608,603,599,595,591,587,582,578,574,570,566,562,557,553,549,545,541,536,532,528,524,520,515,511,507,503,499,494,490,486,482,478,473,469,465,461,456,452,448,444,440,435,431,427,423,419,414,410,406,402,398,393,389,385,381,377,372,368,364,360,356,351,347,343,339,335,330,326,322,318,314,310,305,301,297,293,289,285,280,276,272,268,264,260,256,251,247,243,239,235,231,227,223,218,214,210,206,202,198,194,190,186,182,178,174,169,165,161,157,153,149,145,141,137,133,129,125,121,117,113,109,105,101,97,93,89,85,81,77,73,69,66,62,58,54,50,46,42,38,34,30,27,23,19,15,11,7,3,0,-3,-7,-11,-15,-18,-22,-26,-30,-34,-37,-41,-45,-49,-52,-56,-60,-63,-67,-71,-74,-78,-82,-86,-89,-93,-96,-100,-104,-107,-111,-115,-118,-122,-125,-129,-132,-136,-139,-143,-147,-150,-154,-157,-161,-164,-168,-171,-174,-178,-181,-185,-188,-192,-195,-198,-202,-205,-209,-212,-215,-219,-222,-225,-229,-232,-235,-238,-242,-245,-248,-251,-255,-258,-261,-264,-268,-271,-274,-277,-280,-283,-287,-290,-293,-296,-299,-302,-305,-308,-311,-314,-317,-320,-323,-326,-329,-332,-335,-338,-341,-344,-347,-350,-353,-356,-359,-362,-364,-367,-370,-373,-376,-379,-381,-384,-387,-390,-392,-395,-398,-401,-403,-406,-409,-411,-414,-417,-419,-422,-425,-427,-430,-432,-435,-438,-440,-443,-445,-448,-450,-453,-455,-458,-460,-463,-465,-468,-470,-472,-475,-477,-479,-482,-484,-486,-489,-491,-493,-496,-498,-500,-502,-505,-507,-509,-511,-514,-516,-518,-520,-522,-524,-526,-528,-531,-533,-535,-537,-539,-541,-543,-545,-547,-549,-551,-553,-555,-557,-559,-560,-562,-564,-566,-568,-570,-572,-573,-575,-577,-579,-581,-582,-584,-586,-588,-589,-591,-593,-594,-596,-598,-599,-601,-603,-604,-606,-607,-609,-610,-612,-613,-615,-616,-618,-619,-621,-622,-624,-625,-627,-628,-629,-631,-632,-633,-635,-636,-637,-639,-640,-641,-643,-644,-645,-646,-647,-649,-650,-651,-652,-653,-654,-656,-657,-658,-659,-660,-661,-662,-663,-664,-665,-666,-667,-668,-669,-670,-671,-672,-673,-674,-674,-675,-676,-677,-678,-679,-679,-680,-681,-682,-683,-683,-684,-685,-686,-686,-687,-688,-688,-689,-690,-690,-691,-691,-692,-693,-693,-694,-694,-695,-695,-696,-696,-697,-697,-698,-698,-699,-699,-699,-700,-700,-701,-701,-701,-702,-702,-702,-703,-703,-703,-703,-704,-704,-704,-704,-705,-705,-705,-705,-705,-705,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-705,-705,-705,-705,-705,-705,-704,-704,-704,-704,-703,-703,-703,-703,-702,-702,-702,-701,-701,-701,-700,-700,-700,-699,-699,-698,-698,-698,-697,-697,-696,-696,-695,-695,-694,-694,-693,-693,-692,-692,-691,-691,-690,-689,-689,-688,-688,-687,-686,-686,-685,-684,-684,-683,-682,-682,-681,-680,-679,-679,-678,-677,-676,-676,-675,-674,-673,-672,-671,-671,-670,-669,-668,-667,-666,-665,-664,-664,-663,-662,-661,-660,-659,-658,-657,-656,-655,-654,-653,-652,-651,-650,-649,-648,-647,-646,-644,-643,-642,-641,-640,-639,-638,-637,-636,-634,-633,-632,-631,-630,-628,-627,-626,-625,-624,-622,-621,-620,-619,-617,-616,-615,-614,-612,-611,-610,-608,-607,-606,-604,-603,-602,-600,-599,-597,-596,-595,-593,-592,-590,-589,-588,-586,-585,-583,-582,-580,-579,-577,-576,-574,-573,-571,-570,-568,-567,-565,-564,-562,-561,-559,-558,-556,-555,-553,-551,-550,-548,-547,-545,-543,-542,-540,-539,-537,-535,-534,-532,-530,-529,-527,-525,-524,-522,-520,-519,-517,-515,-513,-512,-510,-508,-507,-505,-503,-501,-500,-498,-496,-494,-493,-491,-489,-487,-485,-484,-482,-480,-478,-476,-475,-473,-471,-469,-467,-465,-464,-462,-460,-458,-456,-454,-453,-451,-449,-447,-445,-443,-441,-439,-437,-436,-434,-432,-430,-428,-426,-424,-422,-420,-418,-416,-414,-413,-411,-409,-407,-405,-403,-401,-399,-397,-395,-393,-391,-389,-387,-385,-383,-381,-379,-377,-375,-373,-371,-369,-367,-365,-363,-361,-359,-357,-355,-353,-351,-349,-347,-345,-343,-341,-339,-337,-335,-333,-331,-329,-327,-325,-323,-321,-319,-317,-315,-313,-311,-309,-306,-304,-302,-300,-298,-296,-294,-292,-290,-288,-286,-284,-282,-280,-278,-276,-274,-272,-269,-267,-265,-263,-261,-259,-257,-255,-253,-251,-249,-247,-245,-243,-241,-238,-236,-234,-232,-230,-228,-226,-224,-222,-220,-218,-216,-214,-212,-210,-207,-205,-203,-201,-199,-197,-195,-193,-191,-189,-187,-185,-183,-181,-179,-177,-175,-173,-171,-168,-166,-164,-162,-160,-158,-156,-154,-152,-150,-148,-146,-144,-142,-140,-138,-136,-134,-132,-130,-128,-126,-124,-122,-120,-118,-116,-114,-112,-110,-108,-106,-104,-102,-100,-98,-96,-94,-92,-90,-88,-86,-84,-82,-80,-78,-76,-74,-72,-70,-68,-66,-64,-62,-60,-59,-57,-55,-53,-51,-49,-47,-45,-43,-41,-39,-37,-36,-34,-32,-30,-28,-26,-24,-22,-20,-19,-17,-15,-13,-11,-9,-7,-6,-4,-2,-0,1,3,4,6,8,10,12,14,15,17,19,21,23,24,26,28,30,31,33,35,37,39,40,42,44,46,47,49,51,52,54,56,58,59,61,63,64,66,68,69,71,73,74,76,78,79,81,83,84,86,88,89,91,92,94,96,97,99,100,102,104,105,107,108,110,111,113,115,116,118,119,121,122,124,125,127,128,130,131,133,134,136,137,139,140,142,143,144,146,147,149,150,152,153,154,156,157,159,160,161,163,164,166,167,168,170,171,172,174,175,176,178,179,180,182,183,184,185,187,188,189,190,192,193,194,195,197,198,199,200,202,203,204,205,206,208,209,210,211,212,213,215,216,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,257,258,259,260,261,262,263,264,264,265,266,267,268,269,269,270,271,272,273,273,274,275,276,276,277,278,279,279,280,281,282,282,283,284,284,285,286,286,287,288,288,289,290,290,291,292,292,293,293,294,295,295,296,296,297,297,298,299,299,300,300,301,301,302,302,303,303,304,304,305,305,306,306,307,307,307,308,308,309,309,310,310,310,311,311,312,312,312,313,313,313,314,314,314,315,315,315,316,316,316,317,317,317,317,318,318,318,319,319,319,319,319,320,320,320,320,321,321,321,321,321,321,322,322,322,322,322,322,323,323,323,323,323,323,323,323,323,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,323,323,323,323,323,323,323,323,323,322,322,322,322,322,322,322,321,321,321,321,321,321,320,320,320,320,320,319,319,319,319,318,318,318,318,317,317,317,317,316,316,316,316,315,315,315,314,314,314,313,313,313,312,312,312,311,311,311,310,310,310,309,309,308,308,308,307,307,306,306,306,305,305,304,304,304,303,303,302,302,301,301,300,300,299,299,299,298,298,297,297,296,296,295,295,294,294,293,292,292,291,291,290,290,289,289,288,288,287,286,286,285,285,284,284,283,282,282,281,281,280,279,279,278,278,277,276,276,275,275,274,273,273,272,271,271,270,269,269,268,267,267,266,265,265,264,263,263,262,261,261,260,259,258,258,257,256,256,255,254,253,253,252,251,251,250,249,248,248,247,246,245,245,244,243,242,242,241,240,239,239,238,237,236,235,235,234,233,232,231,231,230,229,228,228,227,226,225,224,223,223,222,221,220,219,219,218,217,216,215,214,214,213,212,211,210,209,209,208,207,206,205,204,203,203,202,201,200,199,198,197,197,196,195,194,193,192,191,191,190,189,188,187,186,185,184,184,183,182,181,180,179,178,177,176,176,175,174,173,172,171,170,169,168,167,167,166,165,164,163,162,161,160,159,158,158,157,156,155,154,153,152,151,150,149,148,148,147,146,145,144,143,142,141,140,139,138,137,137,136,135,134,133,132,131,130,129,128,127,126,126,125,124,123,122,121,120,119,118,117,116,115,115,114,113,112,111,110,109,108,107,106,105,105,104,103,102,101,100,99,98,97,96,95,94,94,93,92,91,90,89,88,87,86,85,85,84,83,82,81,80,79,78,77,76,76,75,74,73,72,71,70,69,68,68,67,66,65,64,63,62,61,60,60,59,58,57,56,55,54,53,53,52,51,50,49,48,47,47,46,45,44,43,42,41,41,40,39,38,37,36,36,35,34,33,32,31,30,30,29,28,27,26,26,25,24,23,22,21,21,20,19,18,17,17,16,15,14,13,13,12,11,10,9,9,8,7,6,5,5,4,3,2,2,1,0,-0,-1,-1,-2,-3,-4,-4,-5,-6,-7,-7,-8,-9,-10,-10,-11,-12,-13,-13,-14,-15,-16,-16,-17,-18,-18,-19,-20,-21,-21,-22,-23,-23,-24,-25,-25,-26,-27,-28,-28,-29,-30,-30,-31,-32,-32,-33,-34,-34,-35,-36,-36,-37,-38,-38,-39,-40,-40,-41,-42,-42,-43,-44,-44,-45,-45,-46,-47,-47,-48,-49,-49,-50,-50,-51,-52,-52,-53,-53,-54,-55,-55,-56,-56,-57,-58,-58,-59,-59,-60,-60,-61,-62,-62,-63,-63,-64,-64,-65,-65,-66,-67,-67,-68,-68,-69,-69,-70,-70,-71,-71,-72,-72,-73,-73,-74,-74,-75,-75,-76,-76,-77,-77,-78,-78,-79,-79,-80,-80,-81,-81,-82,-82,-83,-83,-83,-84,-84,-85,-85,-86,-86,-87,-87,-87,-88,-88,-89,-89,-90,-90,-90,-91,-91,-92,-92,-92,-93,-93,-94,-94,-94,-95,-95,-96,-96,-96,-97,-97,-97,-98,-98,-99,-99,-99,-100,-100,-100,-101,-101,-101,-102,-102,-102,-103,-103,-103,-104,-104,-104,-105,-105,-105,-105,-106,-106,-106,-107,-107,-107,-107,-108,-108,-108,-109,-109,-109,-109,-110,-110,-110,-110,-111,-111,-111,-111,-112,-112,-112,-112,-113,-113,-113,-113,-114,-114,-114,-114,-114,-115,-115,-115,-115,-115,-116,-116,-116,-116,-116,-117,-117,-117,-117,-117,-117,-118,-118,-118,-118,-118,-118,-119,-119,-119,-119,-119,-119,-119,-120,-120,-120,-120,-120,-120,-120,-120,-121,-121,-121,-121,-121,-121,-121,-121,-121,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-123,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-122,-121,-121,-121,-121,-121,-121,-121,-121,-121,-121,-120,-120,-120,-120,-120,-120,-120,-120,-120,-119,-119,-119,-119,-119,-119,-119,-118,-118,-118,-118,-118,-118,-118,-117,-117,-117,-117,-117,-117,-117,-116,-116,-116,-116,-116,-116,-115,-115,-115,-115,-115,-115,-114,-114,-114,-114,-114,-113,-113,-113,-113,-113,-112,-112,-112,-112,-112,-111,-111,-111,-111,-111,-110,-110,-110,-110,-110,-109,-109,-109,-109,-109,-108,-108,-108,-108,-107,-107,-107,-107,-106,-106,-106,-106,-106,-105,-105,-105,-105,-104,-104,-104,-104,-103,-103,-103,-103,-102,-102,-102,-102,-101,-101,-101,-101,-100,-100,-100,-100,-99,-99,-99,-98,-98,-98,-98,-97,-97,-97,-97,-96,-96,-96,-95,-95,-95,-95,-94,-94,-94,-93,-93,-93,-93,-92,-92,-92,-91,-91,-91,-91,-90,-90,-90,-89,-89,-89,-89,-88,-88,-88,-87,-87,-87,-86,-86,-86,-86,-85,-85,-85,-84,-84,-84,-83,-83,-83,-82,-82,-82,-81,-81,-81,-81,-80,-80,-80,-79,-79,-79,-78,-78,-78,-77,-77,-77,-76,-76,-76,-75,-75,-75,-74,-74,-74,-74,-73,-73,-73,-72,-72,-72,-71,-71,-71,-70,-70,-70,-69,-69,-69,-68,-68,-68,-67,-67,-67,-66,-66,-66,-65,-65,-65,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-61,-60,-60,-60,-59,-59,-59,-58,-58,-58,-57,-57,-57,-56,-56,-56,-55,-55,-55,-54,-54,-54,-53,-53,-53,-52,-52,-52,-51,-51,-51,-50,-50,-50,-49,-49,-49,-48,-48,-48,-47,-47,-47,-46,-46,-46,-45,-45,-45,-44,-44,-44,-43,-43,-43,-42,-42,-42,-41,-41,-41,-41,-40,-40,-40,-39,-39,-39,-38,-38,-38,-37,-37,-37,-36,-36,-36,-35,-35,-35,-34,-34,-34,-33,-33,-33,-32,-32,-32,-32,-31,-31,-31,-30,-30,-30,-29,-29,-29,-28,-28,-28,-27,-27,-27,-27,-26,-26,-26,-25,-25,-25,-24,-24,-24,-23,-23,-23,-23,-22,-22,-22,-21,-21,-21,-20,-20,-20,-20,-19,-19,-19,-18,-18,-18,-18,-17,-17,-17,-16,-16,-16,-16,-15,-15,-15,-14,-14,-14,-14,-13,-13,-13,-12,-12,-12,-12,-11,-11,-11,-11,-10,-10,-10,-9,-9,-9,-9,-8,-8,-8,-8,-7,-7,-7,-7,-6,-6,-6,-5,-5,-5,-5,-4,-4,-4,-4,-3,-3,-3,-3,-2,-2,-2,-2,-1,-1,-1,-1,-0,-0,-0,-0,-0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,9,9,10,10,10,10,10,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15,15,15,16,16,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,19,19,19,19,19,19,19,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,26};
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/coeff_3072_to_25.h b/targets/ARCH/USRP/USERSPACE/LIB/coeff_3072_to_25.h
new file mode 100644
index 00000000000..a29c64aafaa
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/coeff_3072_to_25.h
@@ -0,0 +1 @@
+short coeff_3072_to_25[] = {21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,18,18,18,18,18,18,17,17,17,17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,11,11,11,11,11,11,11,10,10,10,10,10,10,10,9,9,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,-0,-0,-0,-0,-0,-0,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-4,-5,-5,-5,-5,-5,-6,-6,-6,-6,-6,-7,-7,-7,-7,-8,-8,-8,-8,-8,-9,-9,-9,-9,-10,-10,-10,-10,-10,-11,-11,-11,-11,-12,-12,-12,-12,-13,-13,-13,-13,-13,-14,-14,-14,-14,-15,-15,-15,-15,-16,-16,-16,-16,-17,-17,-17,-17,-18,-18,-18,-18,-19,-19,-19,-19,-20,-20,-20,-20,-21,-21,-21,-21,-22,-22,-22,-22,-23,-23,-23,-23,-24,-24,-24,-24,-25,-25,-25,-25,-26,-26,-26,-26,-27,-27,-27,-27,-28,-28,-28,-28,-29,-29,-29,-29,-30,-30,-30,-30,-31,-31,-31,-32,-32,-32,-32,-33,-33,-33,-33,-34,-34,-34,-34,-35,-35,-35,-36,-36,-36,-36,-37,-37,-37,-37,-38,-38,-38,-38,-39,-39,-39,-40,-40,-40,-40,-41,-41,-41,-41,-42,-42,-42,-43,-43,-43,-43,-44,-44,-44,-44,-45,-45,-45,-46,-46,-46,-46,-47,-47,-47,-47,-48,-48,-48,-48,-49,-49,-49,-50,-50,-50,-50,-51,-51,-51,-51,-52,-52,-52,-53,-53,-53,-53,-54,-54,-54,-54,-55,-55,-55,-55,-56,-56,-56,-57,-57,-57,-57,-58,-58,-58,-58,-59,-59,-59,-59,-60,-60,-60,-61,-61,-61,-61,-62,-62,-62,-62,-63,-63,-63,-63,-64,-64,-64,-64,-65,-65,-65,-65,-66,-66,-66,-66,-67,-67,-67,-67,-68,-68,-68,-68,-69,-69,-69,-69,-70,-70,-70,-70,-71,-71,-71,-71,-72,-72,-72,-72,-73,-73,-73,-73,-74,-74,-74,-74,-75,-75,-75,-75,-76,-76,-76,-76,-76,-77,-77,-77,-77,-78,-78,-78,-78,-78,-79,-79,-79,-79,-80,-80,-80,-80,-80,-81,-81,-81,-81,-82,-82,-82,-82,-82,-83,-83,-83,-83,-83,-84,-84,-84,-84,-84,-85,-85,-85,-85,-85,-86,-86,-86,-86,-86,-87,-87,-87,-87,-87,-88,-88,-88,-88,-88,-88,-89,-89,-89,-89,-89,-89,-90,-90,-90,-90,-90,-90,-91,-91,-91,-91,-91,-91,-92,-92,-92,-92,-92,-92,-93,-93,-93,-93,-93,-93,-93,-94,-94,-94,-94,-94,-94,-94,-95,-95,-95,-95,-95,-95,-95,-95,-96,-96,-96,-96,-96,-96,-96,-96,-96,-97,-97,-97,-97,-97,-97,-97,-97,-97,-97,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-97,-97,-97,-97,-97,-97,-97,-97,-97,-96,-96,-96,-96,-96,-96,-96,-95,-95,-95,-95,-95,-95,-95,-94,-94,-94,-94,-94,-94,-94,-93,-93,-93,-93,-93,-92,-92,-92,-92,-92,-92,-91,-91,-91,-91,-91,-90,-90,-90,-90,-90,-89,-89,-89,-89,-89,-88,-88,-88,-88,-87,-87,-87,-87,-86,-86,-86,-86,-85,-85,-85,-85,-84,-84,-84,-84,-83,-83,-83,-83,-82,-82,-82,-82,-81,-81,-81,-80,-80,-80,-79,-79,-79,-79,-78,-78,-78,-77,-77,-77,-76,-76,-76,-75,-75,-75,-74,-74,-74,-73,-73,-73,-72,-72,-72,-71,-71,-71,-70,-70,-70,-69,-69,-69,-68,-68,-67,-67,-67,-66,-66,-66,-65,-65,-64,-64,-64,-63,-63,-62,-62,-62,-61,-61,-60,-60,-60,-59,-59,-58,-58,-58,-57,-57,-56,-56,-55,-55,-54,-54,-54,-53,-53,-52,-52,-51,-51,-50,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-45,-44,-44,-43,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-28,-28,-27,-27,-26,-26,-25,-25,-24,-23,-23,-22,-22,-21,-21,-20,-20,-19,-18,-18,-17,-17,-16,-15,-15,-14,-14,-13,-13,-12,-11,-11,-10,-10,-9,-8,-8,-7,-7,-6,-5,-5,-4,-3,-3,-2,-2,-1,-0,-0,0,1,1,2,2,3,4,4,5,6,6,7,8,8,9,9,10,11,11,12,13,13,14,15,15,16,17,17,18,19,19,20,21,21,22,23,23,24,25,25,26,27,27,28,29,29,30,31,32,32,33,34,34,35,36,36,37,38,39,39,40,41,41,42,43,43,44,45,46,46,47,48,48,49,50,51,51,52,53,53,54,55,56,56,57,58,58,59,60,61,61,62,63,64,64,65,66,67,67,68,69,69,70,71,72,72,73,74,75,75,76,77,78,78,79,80,80,81,82,83,83,84,85,86,86,87,88,89,89,90,91,92,92,93,94,95,95,96,97,98,98,99,100,101,101,102,103,104,104,105,106,107,107,108,109,110,110,111,112,113,113,114,115,116,116,117,118,118,119,120,121,121,122,123,124,124,125,126,127,127,128,129,130,130,131,132,133,133,134,135,135,136,137,138,138,139,140,141,141,142,143,143,144,145,146,146,147,148,149,149,150,151,151,152,153,154,154,155,156,156,157,158,159,159,160,161,161,162,163,163,164,165,166,166,167,168,168,169,170,170,171,172,172,173,174,174,175,176,176,177,178,178,179,180,180,181,182,182,183,184,184,185,186,186,187,188,188,189,190,190,191,191,192,193,193,194,195,195,196,197,197,198,198,199,200,200,201,201,202,203,203,204,204,205,206,206,207,207,208,209,209,210,210,211,211,212,213,213,214,214,215,215,216,216,217,218,218,219,219,220,220,221,221,222,222,223,223,224,224,225,225,226,226,227,227,228,228,229,229,230,230,231,231,232,232,233,233,234,234,234,235,235,236,236,237,237,238,238,238,239,239,240,240,240,241,241,242,242,242,243,243,244,244,244,245,245,245,246,246,247,247,247,248,248,248,249,249,249,250,250,250,251,251,251,252,252,252,252,253,253,253,254,254,254,254,255,255,255,255,256,256,256,256,257,257,257,257,258,258,258,258,258,259,259,259,259,259,260,260,260,260,260,260,261,261,261,261,261,261,262,262,262,262,262,262,262,262,262,263,263,263,263,263,263,263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,263,263,263,263,263,263,263,263,263,263,263,263,263,263,262,262,262,262,262,262,262,262,261,261,261,261,261,261,260,260,260,260,260,260,259,259,259,259,258,258,258,258,258,257,257,257,257,256,256,256,256,255,255,255,254,254,254,253,253,253,253,252,252,252,251,251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,245,244,244,243,243,242,242,242,241,241,240,240,239,239,238,238,237,237,236,236,235,235,234,233,233,232,232,231,231,230,230,229,228,228,227,227,226,225,225,224,224,223,222,222,221,220,220,219,218,218,217,216,216,215,214,214,213,212,212,211,210,209,209,208,207,206,206,205,204,203,203,202,201,200,200,199,198,197,196,195,195,194,193,192,191,190,190,189,188,187,186,185,184,184,183,182,181,180,179,178,177,176,175,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,144,143,142,141,140,139,138,137,136,135,134,132,131,130,129,128,127,126,124,123,122,121,120,119,117,116,115,114,113,112,110,109,108,107,106,104,103,102,101,99,98,97,96,94,93,92,91,89,88,87,86,84,83,82,80,79,78,76,75,74,73,71,70,69,67,66,65,63,62,60,59,58,56,55,54,52,51,50,48,47,45,44,43,41,40,38,37,36,34,33,31,30,28,27,26,24,23,21,20,18,17,15,14,12,11,9,8,7,5,4,2,1,-0,-1,-3,-4,-6,-7,-9,-10,-12,-13,-15,-17,-18,-20,-21,-23,-24,-26,-27,-29,-30,-32,-33,-35,-37,-38,-40,-41,-43,-44,-46,-48,-49,-51,-52,-54,-55,-57,-59,-60,-62,-63,-65,-67,-68,-70,-71,-73,-75,-76,-78,-79,-81,-83,-84,-86,-88,-89,-91,-92,-94,-96,-97,-99,-101,-102,-104,-106,-107,-109,-111,-112,-114,-115,-117,-119,-120,-122,-124,-125,-127,-129,-130,-132,-134,-135,-137,-139,-140,-142,-144,-145,-147,-149,-150,-152,-154,-155,-157,-159,-160,-162,-164,-165,-167,-169,-170,-172,-174,-175,-177,-179,-181,-182,-184,-186,-187,-189,-191,-192,-194,-196,-197,-199,-201,-202,-204,-206,-207,-209,-211,-212,-214,-216,-217,-219,-221,-223,-224,-226,-228,-229,-231,-233,-234,-236,-238,-239,-241,-243,-244,-246,-248,-249,-251,-253,-254,-256,-258,-259,-261,-263,-264,-266,-268,-269,-271,-273,-274,-276,-277,-279,-281,-282,-284,-286,-287,-289,-291,-292,-294,-296,-297,-299,-300,-302,-304,-305,-307,-309,-310,-312,-313,-315,-317,-318,-320,-321,-323,-325,-326,-328,-329,-331,-332,-334,-336,-337,-339,-340,-342,-344,-345,-347,-348,-350,-351,-353,-354,-356,-357,-359,-361,-362,-364,-365,-367,-368,-370,-371,-373,-374,-376,-377,-379,-380,-382,-383,-385,-386,-388,-389,-391,-392,-393,-395,-396,-398,-399,-401,-402,-404,-405,-406,-408,-409,-411,-412,-414,-415,-416,-418,-419,-421,-422,-423,-425,-426,-427,-429,-430,-431,-433,-434,-436,-437,-438,-440,-441,-442,-443,-445,-446,-447,-449,-450,-451,-452,-454,-455,-456,-458,-459,-460,-461,-463,-464,-465,-466,-467,-469,-470,-471,-472,-473,-475,-476,-477,-478,-479,-480,-482,-483,-484,-485,-486,-487,-488,-489,-491,-492,-493,-494,-495,-496,-497,-498,-499,-500,-501,-502,-503,-504,-505,-506,-507,-508,-509,-510,-511,-512,-513,-514,-515,-516,-517,-518,-519,-520,-521,-522,-523,-523,-524,-525,-526,-527,-528,-529,-530,-530,-531,-532,-533,-534,-534,-535,-536,-537,-538,-538,-539,-540,-541,-541,-542,-543,-544,-544,-545,-546,-546,-547,-548,-548,-549,-550,-550,-551,-552,-552,-553,-553,-554,-555,-555,-556,-556,-557,-557,-558,-558,-559,-559,-560,-560,-561,-561,-562,-562,-563,-563,-564,-564,-565,-565,-565,-566,-566,-567,-567,-567,-568,-568,-568,-569,-569,-569,-570,-570,-570,-570,-571,-571,-571,-571,-572,-572,-572,-572,-573,-573,-573,-573,-573,-573,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-573,-573,-573,-573,-573,-573,-572,-572,-572,-572,-571,-571,-571,-571,-570,-570,-570,-569,-569,-569,-568,-568,-568,-567,-567,-567,-566,-566,-565,-565,-564,-564,-564,-563,-563,-562,-562,-561,-561,-560,-559,-559,-558,-558,-557,-557,-556,-555,-555,-554,-554,-553,-552,-552,-551,-550,-549,-549,-548,-547,-547,-546,-545,-544,-544,-543,-542,-541,-540,-539,-539,-538,-537,-536,-535,-534,-533,-532,-532,-531,-530,-529,-528,-527,-526,-525,-524,-523,-522,-521,-520,-519,-518,-516,-515,-514,-513,-512,-511,-510,-509,-508,-506,-505,-504,-503,-502,-500,-499,-498,-497,-495,-494,-493,-492,-490,-489,-488,-486,-485,-484,-482,-481,-479,-478,-477,-475,-474,-472,-471,-470,-468,-467,-465,-464,-462,-461,-459,-458,-456,-454,-453,-451,-450,-448,-447,-445,-443,-442,-440,-438,-437,-435,-433,-432,-430,-428,-427,-425,-423,-421,-420,-418,-416,-414,-412,-411,-409,-407,-405,-403,-401,-400,-398,-396,-394,-392,-390,-388,-386,-384,-382,-380,-378,-376,-374,-372,-370,-368,-366,-364,-362,-360,-358,-356,-354,-352,-350,-348,-346,-343,-341,-339,-337,-335,-333,-330,-328,-326,-324,-322,-319,-317,-315,-313,-310,-308,-306,-303,-301,-299,-296,-294,-292,-289,-287,-285,-282,-280,-278,-275,-273,-270,-268,-265,-263,-261,-258,-256,-253,-251,-248,-246,-243,-241,-238,-236,-233,-231,-228,-225,-223,-220,-218,-215,-212,-210,-207,-205,-202,-199,-197,-194,-191,-189,-186,-183,-180,-178,-175,-172,-170,-167,-164,-161,-159,-156,-153,-150,-147,-145,-142,-139,-136,-133,-131,-128,-125,-122,-119,-116,-113,-111,-108,-105,-102,-99,-96,-93,-90,-87,-84,-81,-78,-75,-72,-69,-67,-64,-61,-58,-55,-52,-48,-45,-42,-39,-36,-33,-30,-27,-24,-21,-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18,21,25,28,31,34,37,40,44,47,50,53,56,60,63,66,69,72,76,79,82,85,89,92,95,98,102,105,108,111,115,118,121,125,128,131,135,138,141,144,148,151,154,158,161,164,168,171,174,178,181,184,188,191,194,198,201,205,208,211,215,218,221,225,228,232,235,238,242,245,248,252,255,259,262,265,269,272,276,279,282,286,289,293,296,300,303,306,310,313,317,320,323,327,330,334,337,341,344,347,351,354,358,361,365,368,371,375,378,382,385,389,392,395,399,402,406,409,413,416,419,423,426,430,433,436,440,443,447,450,454,457,460,464,467,471,474,477,481,484,488,491,494,498,501,504,508,511,515,518,521,525,528,531,535,538,542,545,548,552,555,558,562,565,568,572,575,578,582,585,588,592,595,598,601,605,608,611,615,618,621,624,628,631,634,637,641,644,647,650,654,657,660,663,666,670,673,676,679,682,686,689,692,695,698,701,704,708,711,714,717,720,723,726,729,733,736,739,742,745,748,751,754,757,760,763,766,769,772,775,778,781,784,787,790,793,796,799,802,805,807,810,813,816,819,822,825,828,830,833,836,839,842,845,847,850,853,856,858,861,864,867,869,872,875,878,880,883,886,888,891,893,896,899,901,904,907,909,912,914,917,919,922,924,927,929,932,934,937,939,942,944,947,949,951,954,956,959,961,963,966,968,970,973,975,977,979,982,984,986,988,991,993,995,997,999,1001,1003,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1045,1047,1049,1051,1053,1055,1056,1058,1060,1062,1063,1065,1067,1068,1070,1072,1073,1075,1077,1078,1080,1081,1083,1085,1086,1088,1089,1091,1092,1093,1095,1096,1098,1099,1101,1102,1103,1105,1106,1107,1109,1110,1111,1112,1114,1115,1116,1117,1118,1119,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1137,1138,1139,1140,1141,1141,1142,1143,1144,1144,1145,1146,1146,1147,1148,1148,1149,1149,1150,1151,1151,1152,1152,1153,1153,1153,1154,1154,1155,1155,1155,1156,1156,1156,1157,1157,1157,1157,1157,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1157,1157,1157,1157,1156,1156,1156,1155,1155,1155,1154,1154,1153,1153,1153,1152,1152,1151,1150,1150,1149,1149,1148,1147,1147,1146,1145,1145,1144,1143,1142,1142,1141,1140,1139,1138,1137,1137,1136,1135,1134,1133,1132,1131,1130,1129,1127,1126,1125,1124,1123,1122,1121,1119,1118,1117,1115,1114,1113,1112,1110,1109,1107,1106,1104,1103,1102,1100,1099,1097,1095,1094,1092,1091,1089,1087,1086,1084,1082,1080,1079,1077,1075,1073,1071,1070,1068,1066,1064,1062,1060,1058,1056,1054,1052,1050,1048,1046,1043,1041,1039,1037,1035,1032,1030,1028,1026,1023,1021,1019,1016,1014,1011,1009,1007,1004,1002,999,997,994,991,989,986,984,981,978,976,973,970,967,965,962,959,956,953,950,948,945,942,939,936,933,930,927,924,921,917,914,911,908,905,902,898,895,892,889,885,882,879,875,872,869,865,862,858,855,851,848,844,841,837,834,830,826,823,819,815,812,808,804,800,797,793,789,785,781,777,773,770,766,762,758,754,750,746,742,738,733,729,725,721,717,713,708,704,700,696,691,687,683,679,674,670,665,661,657,652,648,643,639,634,630,625,621,616,611,607,602,597,593,588,583,579,574,569,564,560,555,550,545,540,535,530,525,521,516,511,506,501,496,491,485,480,475,470,465,460,455,450,444,439,434,429,424,418,413,408,402,397,392,386,381,376,370,365,359,354,348,343,337,332,326,321,315,310,304,298,293,287,282,276,270,264,259,253,247,242,236,230,224,218,213,207,201,195,189,183,177,171,166,160,154,148,142,136,130,124,118,112,105,99,93,87,81,75,69,63,57,50,44,38,32,26,19,13,7,1,-5,-11,-17,-24,-30,-36,-43,-49,-55,-62,-68,-74,-81,-87,-94,-100,-107,-113,-120,-126,-132,-139,-145,-152,-159,-165,-172,-178,-185,-191,-198,-204,-211,-218,-224,-231,-238,-244,-251,-257,-264,-271,-278,-284,-291,-298,-304,-311,-318,-325,-331,-338,-345,-352,-358,-365,-372,-379,-385,-392,-399,-406,-413,-420,-426,-433,-440,-447,-454,-461,-467,-474,-481,-488,-495,-502,-509,-516,-523,-529,-536,-543,-550,-557,-564,-571,-578,-585,-592,-599,-606,-613,-620,-627,-634,-641,-648,-655,-661,-668,-675,-682,-689,-696,-703,-710,-717,-724,-731,-738,-745,-752,-759,-766,-773,-780,-787,-794,-801,-808,-815,-822,-829,-836,-843,-850,-857,-864,-871,-878,-885,-893,-900,-907,-914,-921,-928,-935,-941,-948,-955,-962,-969,-976,-983,-990,-997,-1004,-1011,-1018,-1025,-1032,-1039,-1046,-1053,-1060,-1067,-1074,-1081,-1088,-1095,-1102,-1109,-1116,-1122,-1129,-1136,-1143,-1150,-1157,-1164,-1171,-1178,-1184,-1191,-1198,-1205,-1212,-1219,-1226,-1232,-1239,-1246,-1253,-1260,-1266,-1273,-1280,-1287,-1293,-1300,-1307,-1314,-1320,-1327,-1334,-1341,-1347,-1354,-1361,-1367,-1374,-1381,-1387,-1394,-1401,-1407,-1414,-1420,-1427,-1434,-1440,-1447,-1453,-1460,-1466,-1473,-1479,-1486,-1492,-1499,-1505,-1512,-1518,-1525,-1531,-1537,-1544,-1550,-1557,-1563,-1569,-1576,-1582,-1588,-1595,-1601,-1607,-1613,-1620,-1626,-1632,-1638,-1644,-1651,-1657,-1663,-1669,-1675,-1681,-1687,-1693,-1699,-1706,-1712,-1718,-1724,-1730,-1736,-1741,-1747,-1753,-1759,-1765,-1771,-1777,-1783,-1788,-1794,-1800,-1806,-1812,-1817,-1823,-1829,-1834,-1840,-1846,-1851,-1857,-1863,-1868,-1874,-1879,-1885,-1890,-1896,-1901,-1907,-1912,-1918,-1923,-1928,-1934,-1939,-1944,-1950,-1955,-1960,-1965,-1970,-1976,-1981,-1986,-1991,-1996,-2001,-2006,-2011,-2016,-2021,-2026,-2031,-2036,-2041,-2046,-2051,-2056,-2060,-2065,-2070,-2075,-2080,-2084,-2089,-2094,-2098,-2103,-2107,-2112,-2116,-2121,-2125,-2130,-2134,-2139,-2143,-2147,-2152,-2156,-2160,-2165,-2169,-2173,-2177,-2181,-2186,-2190,-2194,-2198,-2202,-2206,-2210,-2214,-2218,-2222,-2225,-2229,-2233,-2237,-2241,-2244,-2248,-2252,-2255,-2259,-2263,-2266,-2270,-2273,-2277,-2280,-2283,-2287,-2290,-2294,-2297,-2300,-2303,-2307,-2310,-2313,-2316,-2319,-2322,-2325,-2328,-2331,-2334,-2337,-2340,-2343,-2346,-2348,-2351,-2354,-2357,-2359,-2362,-2364,-2367,-2369,-2372,-2374,-2377,-2379,-2382,-2384,-2386,-2389,-2391,-2393,-2395,-2397,-2399,-2402,-2404,-2406,-2408,-2409,-2411,-2413,-2415,-2417,-2419,-2420,-2422,-2424,-2425,-2427,-2429,-2430,-2432,-2433,-2434,-2436,-2437,-2438,-2440,-2441,-2442,-2443,-2445,-2446,-2447,-2448,-2449,-2450,-2451,-2451,-2452,-2453,-2454,-2455,-2455,-2456,-2457,-2457,-2458,-2458,-2459,-2459,-2460,-2460,-2460,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2460,-2460,-2460,-2459,-2459,-2459,-2458,-2458,-2457,-2456,-2456,-2455,-2454,-2454,-2453,-2452,-2451,-2450,-2449,-2448,-2447,-2446,-2445,-2444,-2442,-2441,-2440,-2438,-2437,-2436,-2434,-2433,-2431,-2429,-2428,-2426,-2424,-2423,-2421,-2419,-2417,-2415,-2413,-2411,-2409,-2407,-2405,-2403,-2401,-2398,-2396,-2394,-2391,-2389,-2386,-2384,-2381,-2379,-2376,-2373,-2370,-2368,-2365,-2362,-2359,-2356,-2353,-2350,-2347,-2344,-2341,-2337,-2334,-2331,-2328,-2324,-2321,-2317,-2314,-2310,-2306,-2303,-2299,-2295,-2292,-2288,-2284,-2280,-2276,-2272,-2268,-2264,-2260,-2255,-2251,-2247,-2242,-2238,-2234,-2229,-2225,-2220,-2215,-2211,-2206,-2201,-2197,-2192,-2187,-2182,-2177,-2172,-2167,-2162,-2157,-2151,-2146,-2141,-2135,-2130,-2125,-2119,-2114,-2108,-2102,-2097,-2091,-2085,-2080,-2074,-2068,-2062,-2056,-2050,-2044,-2038,-2031,-2025,-2019,-2013,-2006,-2000,-1993,-1987,-1980,-1974,-1967,-1961,-1954,-1947,-1940,-1933,-1926,-1919,-1912,-1905,-1898,-1891,-1884,-1877,-1869,-1862,-1855,-1847,-1840,-1832,-1825,-1817,-1809,-1802,-1794,-1786,-1778,-1770,-1762,-1754,-1746,-1738,-1730,-1722,-1714,-1705,-1697,-1689,-1680,-1672,-1663,-1655,-1646,-1638,-1629,-1620,-1611,-1602,-1594,-1585,-1576,-1567,-1558,-1548,-1539,-1530,-1521,-1511,-1502,-1493,-1483,-1474,-1464,-1455,-1445,-1435,-1426,-1416,-1406,-1396,-1386,-1376,-1366,-1356,-1346,-1336,-1326,-1316,-1305,-1295,-1285,-1274,-1264,-1253,-1243,-1232,-1221,-1211,-1200,-1189,-1178,-1167,-1156,-1145,-1134,-1123,-1112,-1101,-1090,-1079,-1067,-1056,-1045,-1033,-1022,-1010,-999,-987,-975,-964,-952,-940,-928,-916,-904,-892,-880,-868,-856,-844,-832,-820,-807,-795,-783,-770,-758,-745,-733,-720,-707,-695,-682,-669,-656,-643,-630,-618,-605,-591,-578,-565,-552,-539,-526,-512,-499,-486,-472,-459,-445,-431,-418,-404,-391,-377,-363,-349,-335,-321,-307,-293,-279,-265,-251,-237,-223,-209,-194,-180,-166,-151,-137,-122,-108,-93,-78,-64,-49,-34,-19,-5,9,24,39,54,69,84,99,115,130,145,160,176,191,206,222,237,253,268,284,300,315,331,347,363,378,394,410,426,442,458,474,490,506,523,539,555,571,588,604,620,637,653,670,686,703,720,736,753,770,787,803,820,837,854,871,888,905,922,939,956,973,991,1008,1025,1043,1060,1077,1095,1112,1130,1147,1165,1182,1200,1217,1235,1253,1271,1288,1306,1324,1342,1360,1378,1396,1414,1432,1450,1468,1486,1504,1523,1541,1559,1577,1596,1614,1632,1651,1669,1688,1706,1725,1743,1762,1781,1799,1818,1837,1856,1874,1893,1912,1931,1950,1969,1988,2007,2026,2045,2064,2083,2102,2121,2140,2159,2179,2198,2217,2237,2256,2275,2295,2314,2334,2353,2372,2392,2412,2431,2451,2470,2490,2510,2529,2549,2569,2589,2608,2628,2648,2668,2688,2708,2728,2748,2768,2788,2808,2828,2848,2868,2888,2908,2928,2948,2968,2989,3009,3029,3049,3070,3090,3110,3131,3151,3172,3192,3212,3233,3253,3274,3294,3315,3335,3356,3377,3397,3418,3438,3459,3480,3500,3521,3542,3563,3583,3604,3625,3646,3666,3687,3708,3729,3750,3771,3792,3813,3834,3854,3875,3896,3917,3938,3959,3980,4001,4023,4044,4065,4086,4107,4128,4149,4170,4191,4213,4234,4255,4276,4297,4319,4340,4361,4382,4404,4425,4446,4467,4489,4510,4531,4553,4574,4595,4617,4638,4659,4681,4702,4723,4745,4766,4788,4809,4831,4852,4873,4895,4916,4938,4959,4981,5002,5023,5045,5066,5088,5109,5131,5152,5174,5195,5217,5238,5260,5281,5303,5324,5346,5367,5389,5410,5432,5453,5475,5496,5518,5540,5561,5583,5604,5626,5647,5669,5690,5712,5733,5755,5776,5798,5819,5841,5862,5884,5905,5927,5948,5970,5991,6013,6034,6055,6077,6098,6120,6141,6163,6184,6206,6227,6248,6270,6291,6313,6334,6355,6377,6398,6420,6441,6462,6484,6505,6526,6548,6569,6590,6612,6633,6654,6675,6697,6718,6739,6760,6781,6803,6824,6845,6866,6887,6908,6930,6951,6972,6993,7014,7035,7056,7077,7098,7119,7140,7161,7182,7203,7224,7245,7266,7287,7308,7329,7349,7370,7391,7412,7433,7453,7474,7495,7516,7536,7557,7578,7598,7619,7640,7660,7681,7701,7722,7742,7763,7783,7804,7824,7845,7865,7885,7906,7926,7946,7967,7987,8007,8027,8048,8068,8088,8108,8128,8148,8168,8188,8209,8229,8248,8268,8288,8308,8328,8348,8368,8388,8407,8427,8447,8467,8486,8506,8526,8545,8565,8584,8604,8623,8643,8662,8682,8701,8720,8740,8759,8778,8797,8817,8836,8855,8874,8893,8912,8931,8950,8969,8988,9007,9026,9045,9063,9082,9101,9120,9138,9157,9176,9194,9213,9231,9250,9268,9287,9305,9323,9342,9360,9378,9396,9415,9433,9451,9469,9487,9505,9523,9541,9559,9577,9595,9612,9630,9648,9665,9683,9701,9718,9736,9753,9771,9788,9805,9823,9840,9857,9875,9892,9909,9926,9943,9960,9977,9994,10011,10028,10045,10061,10078,10095,10111,10128,10145,10161,10178,10194,10211,10227,10243,10260,10276,10292,10308,10324,10340,10356,10372,10388,10404,10420,10436,10451,10467,10483,10498,10514,10530,10545,10560,10576,10591,10607,10622,10637,10652,10667,10682,10697,10712,10727,10742,10757,10772,10786,10801,10816,10830,10845,10859,10874,10888,10903,10917,10931,10945,10960,10974,10988,11002,11016,11030,11043,11057,11071,11085,11098,11112,11126,11139,11152,11166,11179,11193,11206,11219,11232,11245,11258,11271,11284,11297,11310,11323,11335,11348,11361,11373,11386,11398,11411,11423,11435,11447,11460,11472,11484,11496,11508,11520,11532,11543,11555,11567,11578,11590,11601,11613,11624,11636,11647,11658,11669,11681,11692,11703,11714,11725,11735,11746,11757,11768,11778,11789,11799,11810,11820,11830,11841,11851,11861,11871,11881,11891,11901,11911,11921,11931,11940,11950,11959,11969,11978,11988,11997,12006,12016,12025,12034,12043,12052,12061,12070,12079,12087,12096,12105,12113,12122,12130,12138,12147,12155,12163,12171,12179,12187,12195,12203,12211,12219,12226,12234,12242,12249,12257,12264,12271,12279,12286,12293,12300,12307,12314,12321,12328,12334,12341,12348,12354,12361,12367,12374,12380,12386,12393,12399,12405,12411,12417,12423,12428,12434,12440,12445,12451,12457,12462,12467,12473,12478,12483,12488,12493,12498,12503,12508,12513,12518,12522,12527,12531,12536,12540,12545,12549,12553,12557,12561,12565,12569,12573,12577,12581,12584,12588,12592,12595,12598,12602,12605,12608,12611,12615,12618,12621,12624,12626,12629,12632,12634,12637,12640,12642,12644,12647,12649,12651,12653,12655,12657,12659,12661,12663,12665,12666,12668,12669,12671,12672,12673,12675,12676,12677,12678,12679,12680,12681,12682,12682,12683,12684,12684,12685,12685,12685,12686,12686,12686,12686,12686,12686,12686,12686,12685,12685,12685,12684,12684,12683,12682,12682,12681,12680,12679,12678,12677,12676,12675,12673,12672,12671,12669,12668,12666,12665,12663,12661,12659,12657,12655,12653,12651,12649,12647,12644,12642,12640,12637,12634,12632,12629,12626,12624,12621,12618,12615,12611,12608,12605,12602,12598,12595,12592,12588,12584,12581,12577,12573,12569,12565,12561,12557,12553,12549,12545,12540,12536,12531,12527,12522,12518,12513,12508,12503,12498,12493,12488,12483,12478,12473,12467,12462,12457,12451,12445,12440,12434,12428,12423,12417,12411,12405,12399,12393,12386,12380,12374,12367,12361,12354,12348,12341,12334,12328,12321,12314,12307,12300,12293,12286,12279,12271,12264,12257,12249,12242,12234,12226,12219,12211,12203,12195,12187,12179,12171,12163,12155,12147,12138,12130,12122,12113,12105,12096,12087,12079,12070,12061,12052,12043,12034,12025,12016,12006,11997,11988,11978,11969,11959,11950,11940,11931,11921,11911,11901,11891,11881,11871,11861,11851,11841,11830,11820,11810,11799,11789,11778,11768,11757,11746,11735,11725,11714,11703,11692,11681,11669,11658,11647,11636,11624,11613,11601,11590,11578,11567,11555,11543,11532,11520,11508,11496,11484,11472,11460,11447,11435,11423,11411,11398,11386,11373,11361,11348,11335,11323,11310,11297,11284,11271,11258,11245,11232,11219,11206,11193,11179,11166,11152,11139,11126,11112,11098,11085,11071,11057,11043,11030,11016,11002,10988,10974,10960,10945,10931,10917,10903,10888,10874,10859,10845,10830,10816,10801,10786,10772,10757,10742,10727,10712,10697,10682,10667,10652,10637,10622,10607,10591,10576,10560,10545,10530,10514,10498,10483,10467,10451,10436,10420,10404,10388,10372,10356,10340,10324,10308,10292,10276,10260,10243,10227,10211,10194,10178,10161,10145,10128,10111,10095,10078,10061,10045,10028,10011,9994,9977,9960,9943,9926,9909,9892,9875,9857,9840,9823,9805,9788,9771,9753,9736,9718,9701,9683,9665,9648,9630,9612,9595,9577,9559,9541,9523,9505,9487,9469,9451,9433,9415,9396,9378,9360,9342,9323,9305,9287,9268,9250,9231,9213,9194,9176,9157,9138,9120,9101,9082,9063,9045,9026,9007,8988,8969,8950,8931,8912,8893,8874,8855,8836,8817,8797,8778,8759,8740,8720,8701,8682,8662,8643,8623,8604,8584,8565,8545,8526,8506,8486,8467,8447,8427,8407,8388,8368,8348,8328,8308,8288,8268,8248,8229,8209,8188,8168,8148,8128,8108,8088,8068,8048,8027,8007,7987,7967,7946,7926,7906,7885,7865,7845,7824,7804,7783,7763,7742,7722,7701,7681,7660,7640,7619,7598,7578,7557,7536,7516,7495,7474,7453,7433,7412,7391,7370,7349,7329,7308,7287,7266,7245,7224,7203,7182,7161,7140,7119,7098,7077,7056,7035,7014,6993,6972,6951,6930,6908,6887,6866,6845,6824,6803,6781,6760,6739,6718,6697,6675,6654,6633,6612,6590,6569,6548,6526,6505,6484,6462,6441,6420,6398,6377,6355,6334,6313,6291,6270,6248,6227,6206,6184,6163,6141,6120,6098,6077,6055,6034,6013,5991,5970,5948,5927,5905,5884,5862,5841,5819,5798,5776,5755,5733,5712,5690,5669,5647,5626,5604,5583,5561,5540,5518,5496,5475,5453,5432,5410,5389,5367,5346,5324,5303,5281,5260,5238,5217,5195,5174,5152,5131,5109,5088,5066,5045,5023,5002,4981,4959,4938,4916,4895,4873,4852,4831,4809,4788,4766,4745,4723,4702,4681,4659,4638,4617,4595,4574,4553,4531,4510,4489,4467,4446,4425,4404,4382,4361,4340,4319,4297,4276,4255,4234,4213,4191,4170,4149,4128,4107,4086,4065,4044,4023,4001,3980,3959,3938,3917,3896,3875,3854,3834,3813,3792,3771,3750,3729,3708,3687,3666,3646,3625,3604,3583,3563,3542,3521,3500,3480,3459,3438,3418,3397,3377,3356,3335,3315,3294,3274,3253,3233,3212,3192,3172,3151,3131,3110,3090,3070,3049,3029,3009,2989,2968,2948,2928,2908,2888,2868,2848,2828,2808,2788,2768,2748,2728,2708,2688,2668,2648,2628,2608,2589,2569,2549,2529,2510,2490,2470,2451,2431,2412,2392,2372,2353,2334,2314,2295,2275,2256,2237,2217,2198,2179,2159,2140,2121,2102,2083,2064,2045,2026,2007,1988,1969,1950,1931,1912,1893,1874,1856,1837,1818,1799,1781,1762,1743,1725,1706,1688,1669,1651,1632,1614,1596,1577,1559,1541,1523,1504,1486,1468,1450,1432,1414,1396,1378,1360,1342,1324,1306,1288,1271,1253,1235,1217,1200,1182,1165,1147,1130,1112,1095,1077,1060,1043,1025,1008,991,973,956,939,922,905,888,871,854,837,820,803,787,770,753,736,720,703,686,670,653,637,620,604,588,571,555,539,523,506,490,474,458,442,426,410,394,378,363,347,331,315,300,284,268,253,237,222,206,191,176,160,145,130,115,99,84,69,54,39,24,9,-5,-19,-34,-49,-64,-78,-93,-108,-122,-137,-151,-166,-180,-194,-209,-223,-237,-251,-265,-279,-293,-307,-321,-335,-349,-363,-377,-391,-404,-418,-431,-445,-459,-472,-486,-499,-512,-526,-539,-552,-565,-578,-591,-605,-618,-630,-643,-656,-669,-682,-695,-707,-720,-733,-745,-758,-770,-783,-795,-807,-820,-832,-844,-856,-868,-880,-892,-904,-916,-928,-940,-952,-964,-975,-987,-999,-1010,-1022,-1033,-1045,-1056,-1067,-1079,-1090,-1101,-1112,-1123,-1134,-1145,-1156,-1167,-1178,-1189,-1200,-1211,-1221,-1232,-1243,-1253,-1264,-1274,-1285,-1295,-1305,-1316,-1326,-1336,-1346,-1356,-1366,-1376,-1386,-1396,-1406,-1416,-1426,-1435,-1445,-1455,-1464,-1474,-1483,-1493,-1502,-1511,-1521,-1530,-1539,-1548,-1558,-1567,-1576,-1585,-1594,-1602,-1611,-1620,-1629,-1638,-1646,-1655,-1663,-1672,-1680,-1689,-1697,-1705,-1714,-1722,-1730,-1738,-1746,-1754,-1762,-1770,-1778,-1786,-1794,-1802,-1809,-1817,-1825,-1832,-1840,-1847,-1855,-1862,-1869,-1877,-1884,-1891,-1898,-1905,-1912,-1919,-1926,-1933,-1940,-1947,-1954,-1961,-1967,-1974,-1980,-1987,-1993,-2000,-2006,-2013,-2019,-2025,-2031,-2038,-2044,-2050,-2056,-2062,-2068,-2074,-2080,-2085,-2091,-2097,-2102,-2108,-2114,-2119,-2125,-2130,-2135,-2141,-2146,-2151,-2157,-2162,-2167,-2172,-2177,-2182,-2187,-2192,-2197,-2201,-2206,-2211,-2215,-2220,-2225,-2229,-2234,-2238,-2242,-2247,-2251,-2255,-2260,-2264,-2268,-2272,-2276,-2280,-2284,-2288,-2292,-2295,-2299,-2303,-2306,-2310,-2314,-2317,-2321,-2324,-2328,-2331,-2334,-2337,-2341,-2344,-2347,-2350,-2353,-2356,-2359,-2362,-2365,-2368,-2370,-2373,-2376,-2379,-2381,-2384,-2386,-2389,-2391,-2394,-2396,-2398,-2401,-2403,-2405,-2407,-2409,-2411,-2413,-2415,-2417,-2419,-2421,-2423,-2424,-2426,-2428,-2429,-2431,-2433,-2434,-2436,-2437,-2438,-2440,-2441,-2442,-2444,-2445,-2446,-2447,-2448,-2449,-2450,-2451,-2452,-2453,-2454,-2454,-2455,-2456,-2456,-2457,-2458,-2458,-2459,-2459,-2459,-2460,-2460,-2460,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2461,-2460,-2460,-2460,-2459,-2459,-2458,-2458,-2457,-2457,-2456,-2455,-2455,-2454,-2453,-2452,-2451,-2451,-2450,-2449,-2448,-2447,-2446,-2445,-2443,-2442,-2441,-2440,-2438,-2437,-2436,-2434,-2433,-2432,-2430,-2429,-2427,-2425,-2424,-2422,-2420,-2419,-2417,-2415,-2413,-2411,-2409,-2408,-2406,-2404,-2402,-2399,-2397,-2395,-2393,-2391,-2389,-2386,-2384,-2382,-2379,-2377,-2374,-2372,-2369,-2367,-2364,-2362,-2359,-2357,-2354,-2351,-2348,-2346,-2343,-2340,-2337,-2334,-2331,-2328,-2325,-2322,-2319,-2316,-2313,-2310,-2307,-2303,-2300,-2297,-2294,-2290,-2287,-2283,-2280,-2277,-2273,-2270,-2266,-2263,-2259,-2255,-2252,-2248,-2244,-2241,-2237,-2233,-2229,-2225,-2222,-2218,-2214,-2210,-2206,-2202,-2198,-2194,-2190,-2186,-2181,-2177,-2173,-2169,-2165,-2160,-2156,-2152,-2147,-2143,-2139,-2134,-2130,-2125,-2121,-2116,-2112,-2107,-2103,-2098,-2094,-2089,-2084,-2080,-2075,-2070,-2065,-2060,-2056,-2051,-2046,-2041,-2036,-2031,-2026,-2021,-2016,-2011,-2006,-2001,-1996,-1991,-1986,-1981,-1976,-1970,-1965,-1960,-1955,-1950,-1944,-1939,-1934,-1928,-1923,-1918,-1912,-1907,-1901,-1896,-1890,-1885,-1879,-1874,-1868,-1863,-1857,-1851,-1846,-1840,-1834,-1829,-1823,-1817,-1812,-1806,-1800,-1794,-1788,-1783,-1777,-1771,-1765,-1759,-1753,-1747,-1741,-1736,-1730,-1724,-1718,-1712,-1706,-1699,-1693,-1687,-1681,-1675,-1669,-1663,-1657,-1651,-1644,-1638,-1632,-1626,-1620,-1613,-1607,-1601,-1595,-1588,-1582,-1576,-1569,-1563,-1557,-1550,-1544,-1537,-1531,-1525,-1518,-1512,-1505,-1499,-1492,-1486,-1479,-1473,-1466,-1460,-1453,-1447,-1440,-1434,-1427,-1420,-1414,-1407,-1401,-1394,-1387,-1381,-1374,-1367,-1361,-1354,-1347,-1341,-1334,-1327,-1320,-1314,-1307,-1300,-1293,-1287,-1280,-1273,-1266,-1260,-1253,-1246,-1239,-1232,-1226,-1219,-1212,-1205,-1198,-1191,-1184,-1178,-1171,-1164,-1157,-1150,-1143,-1136,-1129,-1122,-1116,-1109,-1102,-1095,-1088,-1081,-1074,-1067,-1060,-1053,-1046,-1039,-1032,-1025,-1018,-1011,-1004,-997,-990,-983,-976,-969,-962,-955,-948,-941,-935,-928,-921,-914,-907,-900,-893,-885,-878,-871,-864,-857,-850,-843,-836,-829,-822,-815,-808,-801,-794,-787,-780,-773,-766,-759,-752,-745,-738,-731,-724,-717,-710,-703,-696,-689,-682,-675,-668,-661,-655,-648,-641,-634,-627,-620,-613,-606,-599,-592,-585,-578,-571,-564,-557,-550,-543,-536,-529,-523,-516,-509,-502,-495,-488,-481,-474,-467,-461,-454,-447,-440,-433,-426,-420,-413,-406,-399,-392,-385,-379,-372,-365,-358,-352,-345,-338,-331,-325,-318,-311,-304,-298,-291,-284,-278,-271,-264,-257,-251,-244,-238,-231,-224,-218,-211,-204,-198,-191,-185,-178,-172,-165,-159,-152,-145,-139,-132,-126,-120,-113,-107,-100,-94,-87,-81,-74,-68,-62,-55,-49,-43,-36,-30,-24,-17,-11,-5,1,7,13,19,26,32,38,44,50,57,63,69,75,81,87,93,99,105,112,118,124,130,136,142,148,154,160,166,171,177,183,189,195,201,207,213,218,224,230,236,242,247,253,259,264,270,276,282,287,293,298,304,310,315,321,326,332,337,343,348,354,359,365,370,376,381,386,392,397,402,408,413,418,424,429,434,439,444,450,455,460,465,470,475,480,485,491,496,501,506,511,516,521,525,530,535,540,545,550,555,560,564,569,574,579,583,588,593,597,602,607,611,616,621,625,630,634,639,643,648,652,657,661,665,670,674,679,683,687,691,696,700,704,708,713,717,721,725,729,733,738,742,746,750,754,758,762,766,770,773,777,781,785,789,793,797,800,804,808,812,815,819,823,826,830,834,837,841,844,848,851,855,858,862,865,869,872,875,879,882,885,889,892,895,898,902,905,908,911,914,917,921,924,927,930,933,936,939,942,945,948,950,953,956,959,962,965,967,970,973,976,978,981,984,986,989,991,994,997,999,1002,1004,1007,1009,1011,1014,1016,1019,1021,1023,1026,1028,1030,1032,1035,1037,1039,1041,1043,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1071,1073,1075,1077,1079,1080,1082,1084,1086,1087,1089,1091,1092,1094,1095,1097,1099,1100,1102,1103,1104,1106,1107,1109,1110,1112,1113,1114,1115,1117,1118,1119,1121,1122,1123,1124,1125,1126,1127,1129,1130,1131,1132,1133,1134,1135,1136,1137,1137,1138,1139,1140,1141,1142,1142,1143,1144,1145,1145,1146,1147,1147,1148,1149,1149,1150,1150,1151,1152,1152,1153,1153,1153,1154,1154,1155,1155,1155,1156,1156,1156,1157,1157,1157,1157,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1157,1157,1157,1157,1157,1156,1156,1156,1155,1155,1155,1154,1154,1153,1153,1153,1152,1152,1151,1151,1150,1149,1149,1148,1148,1147,1146,1146,1145,1144,1144,1143,1142,1141,1141,1140,1139,1138,1137,1137,1136,1135,1134,1133,1132,1131,1130,1129,1128,1127,1126,1125,1124,1123,1122,1121,1119,1118,1117,1116,1115,1114,1112,1111,1110,1109,1107,1106,1105,1103,1102,1101,1099,1098,1096,1095,1093,1092,1091,1089,1088,1086,1085,1083,1081,1080,1078,1077,1075,1073,1072,1070,1068,1067,1065,1063,1062,1060,1058,1056,1055,1053,1051,1049,1047,1045,1044,1042,1040,1038,1036,1034,1032,1030,1028,1026,1024,1022,1020,1018,1016,1014,1012,1010,1008,1006,1003,1001,999,997,995,993,991,988,986,984,982,979,977,975,973,970,968,966,963,961,959,956,954,951,949,947,944,942,939,937,934,932,929,927,924,922,919,917,914,912,909,907,904,901,899,896,893,891,888,886,883,880,878,875,872,869,867,864,861,858,856,853,850,847,845,842,839,836,833,830,828,825,822,819,816,813,810,807,805,802,799,796,793,790,787,784,781,778,775,772,769,766,763,760,757,754,751,748,745,742,739,736,733,729,726,723,720,717,714,711,708,704,701,698,695,692,689,686,682,679,676,673,670,666,663,660,657,654,650,647,644,641,637,634,631,628,624,621,618,615,611,608,605,601,598,595,592,588,585,582,578,575,572,568,565,562,558,555,552,548,545,542,538,535,531,528,525,521,518,515,511,508,504,501,498,494,491,488,484,481,477,474,471,467,464,460,457,454,450,447,443,440,436,433,430,426,423,419,416,413,409,406,402,399,395,392,389,385,382,378,375,371,368,365,361,358,354,351,347,344,341,337,334,330,327,323,320,317,313,310,306,303,300,296,293,289,286,282,279,276,272,269,265,262,259,255,252,248,245,242,238,235,232,228,225,221,218,215,211,208,205,201,198,194,191,188,184,181,178,174,171,168,164,161,158,154,151,148,144,141,138,135,131,128,125,121,118,115,111,108,105,102,98,95,92,89,85,82,79,76,72,69,66,63,60,56,53,50,47,44,40,37,34,31,28,25,21,18,15,12,9,6,3,0,-3,-6,-9,-12,-15,-18,-21,-24,-27,-30,-33,-36,-39,-42,-45,-48,-52,-55,-58,-61,-64,-67,-69,-72,-75,-78,-81,-84,-87,-90,-93,-96,-99,-102,-105,-108,-111,-113,-116,-119,-122,-125,-128,-131,-133,-136,-139,-142,-145,-147,-150,-153,-156,-159,-161,-164,-167,-170,-172,-175,-178,-180,-183,-186,-189,-191,-194,-197,-199,-202,-205,-207,-210,-212,-215,-218,-220,-223,-225,-228,-231,-233,-236,-238,-241,-243,-246,-248,-251,-253,-256,-258,-261,-263,-265,-268,-270,-273,-275,-278,-280,-282,-285,-287,-289,-292,-294,-296,-299,-301,-303,-306,-308,-310,-313,-315,-317,-319,-322,-324,-326,-328,-330,-333,-335,-337,-339,-341,-343,-346,-348,-350,-352,-354,-356,-358,-360,-362,-364,-366,-368,-370,-372,-374,-376,-378,-380,-382,-384,-386,-388,-390,-392,-394,-396,-398,-400,-401,-403,-405,-407,-409,-411,-412,-414,-416,-418,-420,-421,-423,-425,-427,-428,-430,-432,-433,-435,-437,-438,-440,-442,-443,-445,-447,-448,-450,-451,-453,-454,-456,-458,-459,-461,-462,-464,-465,-467,-468,-470,-471,-472,-474,-475,-477,-478,-479,-481,-482,-484,-485,-486,-488,-489,-490,-492,-493,-494,-495,-497,-498,-499,-500,-502,-503,-504,-505,-506,-508,-509,-510,-511,-512,-513,-514,-515,-516,-518,-519,-520,-521,-522,-523,-524,-525,-526,-527,-528,-529,-530,-531,-532,-532,-533,-534,-535,-536,-537,-538,-539,-539,-540,-541,-542,-543,-544,-544,-545,-546,-547,-547,-548,-549,-549,-550,-551,-552,-552,-553,-554,-554,-555,-555,-556,-557,-557,-558,-558,-559,-559,-560,-561,-561,-562,-562,-563,-563,-564,-564,-564,-565,-565,-566,-566,-567,-567,-567,-568,-568,-568,-569,-569,-569,-570,-570,-570,-571,-571,-571,-571,-572,-572,-572,-572,-573,-573,-573,-573,-573,-573,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-575,-574,-574,-574,-574,-574,-574,-574,-574,-574,-574,-573,-573,-573,-573,-573,-573,-572,-572,-572,-572,-571,-571,-571,-571,-570,-570,-570,-570,-569,-569,-569,-568,-568,-568,-567,-567,-567,-566,-566,-565,-565,-565,-564,-564,-563,-563,-562,-562,-561,-561,-560,-560,-559,-559,-558,-558,-557,-557,-556,-556,-555,-555,-554,-553,-553,-552,-552,-551,-550,-550,-549,-548,-548,-547,-546,-546,-545,-544,-544,-543,-542,-541,-541,-540,-539,-538,-538,-537,-536,-535,-534,-534,-533,-532,-531,-530,-530,-529,-528,-527,-526,-525,-524,-523,-523,-522,-521,-520,-519,-518,-517,-516,-515,-514,-513,-512,-511,-510,-509,-508,-507,-506,-505,-504,-503,-502,-501,-500,-499,-498,-497,-496,-495,-494,-493,-492,-491,-489,-488,-487,-486,-485,-484,-483,-482,-480,-479,-478,-477,-476,-475,-473,-472,-471,-470,-469,-467,-466,-465,-464,-463,-461,-460,-459,-458,-456,-455,-454,-452,-451,-450,-449,-447,-446,-445,-443,-442,-441,-440,-438,-437,-436,-434,-433,-431,-430,-429,-427,-426,-425,-423,-422,-421,-419,-418,-416,-415,-414,-412,-411,-409,-408,-406,-405,-404,-402,-401,-399,-398,-396,-395,-393,-392,-391,-389,-388,-386,-385,-383,-382,-380,-379,-377,-376,-374,-373,-371,-370,-368,-367,-365,-364,-362,-361,-359,-357,-356,-354,-353,-351,-350,-348,-347,-345,-344,-342,-340,-339,-337,-336,-334,-332,-331,-329,-328,-326,-325,-323,-321,-320,-318,-317,-315,-313,-312,-310,-309,-307,-305,-304,-302,-300,-299,-297,-296,-294,-292,-291,-289,-287,-286,-284,-282,-281,-279,-277,-276,-274,-273,-271,-269,-268,-266,-264,-263,-261,-259,-258,-256,-254,-253,-251,-249,-248,-246,-244,-243,-241,-239,-238,-236,-234,-233,-231,-229,-228,-226,-224,-223,-221,-219,-217,-216,-214,-212,-211,-209,-207,-206,-204,-202,-201,-199,-197,-196,-194,-192,-191,-189,-187,-186,-184,-182,-181,-179,-177,-175,-174,-172,-170,-169,-167,-165,-164,-162,-160,-159,-157,-155,-154,-152,-150,-149,-147,-145,-144,-142,-140,-139,-137,-135,-134,-132,-130,-129,-127,-125,-124,-122,-120,-119,-117,-115,-114,-112,-111,-109,-107,-106,-104,-102,-101,-99,-97,-96,-94,-92,-91,-89,-88,-86,-84,-83,-81,-79,-78,-76,-75,-73,-71,-70,-68,-67,-65,-63,-62,-60,-59,-57,-55,-54,-52,-51,-49,-48,-46,-44,-43,-41,-40,-38,-37,-35,-33,-32,-30,-29,-27,-26,-24,-23,-21,-20,-18,-17,-15,-13,-12,-10,-9,-7,-6,-4,-3,-1,-0,1,2,4,5,7,8,9,11,12,14,15,17,18,20,21,23,24,26,27,28,30,31,33,34,36,37,38,40,41,43,44,45,47,48,50,51,52,54,55,56,58,59,60,62,63,65,66,67,69,70,71,73,74,75,76,78,79,80,82,83,84,86,87,88,89,91,92,93,94,96,97,98,99,101,102,103,104,106,107,108,109,110,112,113,114,115,116,117,119,120,121,122,123,124,126,127,128,129,130,131,132,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,175,176,177,178,179,180,181,182,183,184,184,185,186,187,188,189,190,190,191,192,193,194,195,195,196,197,198,199,200,200,201,202,203,203,204,205,206,206,207,208,209,209,210,211,212,212,213,214,214,215,216,216,217,218,218,219,220,220,221,222,222,223,224,224,225,225,226,227,227,228,228,229,230,230,231,231,232,232,233,233,234,235,235,236,236,237,237,238,238,239,239,240,240,241,241,242,242,242,243,243,244,244,245,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250,251,251,252,252,252,253,253,253,253,254,254,254,255,255,255,256,256,256,256,257,257,257,257,258,258,258,258,258,259,259,259,259,260,260,260,260,260,260,261,261,261,261,261,261,262,262,262,262,262,262,262,262,263,263,263,263,263,263,263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,263,263,263,263,263,263,263,263,263,263,263,263,263,263,262,262,262,262,262,262,262,262,262,261,261,261,261,261,261,260,260,260,260,260,260,259,259,259,259,259,258,258,258,258,258,257,257,257,257,256,256,256,256,255,255,255,255,254,254,254,254,253,253,253,252,252,252,252,251,251,251,250,250,250,249,249,249,248,248,248,247,247,247,246,246,245,245,245,244,244,244,243,243,242,242,242,241,241,240,240,240,239,239,238,238,238,237,237,236,236,235,235,234,234,234,233,233,232,232,231,231,230,230,229,229,228,228,227,227,226,226,225,225,224,224,223,223,222,222,221,221,220,220,219,219,218,218,217,216,216,215,215,214,214,213,213,212,211,211,210,210,209,209,208,207,207,206,206,205,204,204,203,203,202,201,201,200,200,199,198,198,197,197,196,195,195,194,193,193,192,191,191,190,190,189,188,188,187,186,186,185,184,184,183,182,182,181,180,180,179,178,178,177,176,176,175,174,174,173,172,172,171,170,170,169,168,168,167,166,166,165,164,163,163,162,161,161,160,159,159,158,157,156,156,155,154,154,153,152,151,151,150,149,149,148,147,146,146,145,144,143,143,142,141,141,140,139,138,138,137,136,135,135,134,133,133,132,131,130,130,129,128,127,127,126,125,124,124,123,122,121,121,120,119,118,118,117,116,116,115,114,113,113,112,111,110,110,109,108,107,107,106,105,104,104,103,102,101,101,100,99,98,98,97,96,95,95,94,93,92,92,91,90,89,89,88,87,86,86,85,84,83,83,82,81,80,80,79,78,78,77,76,75,75,74,73,72,72,71,70,69,69,68,67,67,66,65,64,64,63,62,61,61,60,59,58,58,57,56,56,55,54,53,53,52,51,51,50,49,48,48,47,46,46,45,44,43,43,42,41,41,40,39,39,38,37,36,36,35,34,34,33,32,32,31,30,29,29,28,27,27,26,25,25,24,23,23,22,21,21,20,19,19,18,17,17,16,15,15,14,13,13,12,11,11,10,9,9,8,8,7,6,6,5,4,4,3,2,2,1,1,0,-0,-0,-1,-2,-2,-3,-3,-4,-5,-5,-6,-7,-7,-8,-8,-9,-10,-10,-11,-11,-12,-13,-13,-14,-14,-15,-15,-16,-17,-17,-18,-18,-19,-20,-20,-21,-21,-22,-22,-23,-23,-24,-25,-25,-26,-26,-27,-27,-28,-28,-29,-30,-30,-31,-31,-32,-32,-33,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-50,-51,-51,-52,-52,-53,-53,-54,-54,-54,-55,-55,-56,-56,-57,-57,-58,-58,-58,-59,-59,-60,-60,-60,-61,-61,-62,-62,-62,-63,-63,-64,-64,-64,-65,-65,-66,-66,-66,-67,-67,-67,-68,-68,-69,-69,-69,-70,-70,-70,-71,-71,-71,-72,-72,-72,-73,-73,-73,-74,-74,-74,-75,-75,-75,-76,-76,-76,-77,-77,-77,-78,-78,-78,-79,-79,-79,-79,-80,-80,-80,-81,-81,-81,-82,-82,-82,-82,-83,-83,-83,-83,-84,-84,-84,-84,-85,-85,-85,-85,-86,-86,-86,-86,-87,-87,-87,-87,-88,-88,-88,-88,-89,-89,-89,-89,-89,-90,-90,-90,-90,-90,-91,-91,-91,-91,-91,-92,-92,-92,-92,-92,-92,-93,-93,-93,-93,-93,-94,-94,-94,-94,-94,-94,-94,-95,-95,-95,-95,-95,-95,-95,-96,-96,-96,-96,-96,-96,-96,-97,-97,-97,-97,-97,-97,-97,-97,-97,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-100,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-98,-97,-97,-97,-97,-97,-97,-97,-97,-97,-97,-96,-96,-96,-96,-96,-96,-96,-96,-96,-95,-95,-95,-95,-95,-95,-95,-95,-94,-94,-94,-94,-94,-94,-94,-93,-93,-93,-93,-93,-93,-93,-92,-92,-92,-92,-92,-92,-91,-91,-91,-91,-91,-91,-90,-90,-90,-90,-90,-90,-89,-89,-89,-89,-89,-89,-88,-88,-88,-88,-88,-88,-87,-87,-87,-87,-87,-86,-86,-86,-86,-86,-85,-85,-85,-85,-85,-84,-84,-84,-84,-84,-83,-83,-83,-83,-83,-82,-82,-82,-82,-82,-81,-81,-81,-81,-80,-80,-80,-80,-80,-79,-79,-79,-79,-78,-78,-78,-78,-78,-77,-77,-77,-77,-76,-76,-76,-76,-76,-75,-75,-75,-75,-74,-74,-74,-74,-73,-73,-73,-73,-72,-72,-72,-72,-71,-71,-71,-71,-70,-70,-70,-70,-69,-69,-69,-69,-68,-68,-68,-68,-67,-67,-67,-67,-66,-66,-66,-66,-65,-65,-65,-65,-64,-64,-64,-64,-63,-63,-63,-63,-62,-62,-62,-62,-61,-61,-61,-61,-60,-60,-60,-59,-59,-59,-59,-58,-58,-58,-58,-57,-57,-57,-57,-56,-56,-56,-55,-55,-55,-55,-54,-54,-54,-54,-53,-53,-53,-53,-52,-52,-52,-51,-51,-51,-51,-50,-50,-50,-50,-49,-49,-49,-48,-48,-48,-48,-47,-47,-47,-47,-46,-46,-46,-46,-45,-45,-45,-44,-44,-44,-44,-43,-43,-43,-43,-42,-42,-42,-41,-41,-41,-41,-40,-40,-40,-40,-39,-39,-39,-38,-38,-38,-38,-37,-37,-37,-37,-36,-36,-36,-36,-35,-35,-35,-34,-34,-34,-34,-33,-33,-33,-33,-32,-32,-32,-32,-31,-31,-31,-30,-30,-30,-30,-29,-29,-29,-29,-28,-28,-28,-28,-27,-27,-27,-27,-26,-26,-26,-26,-25,-25,-25,-25,-24,-24,-24,-24,-23,-23,-23,-23,-22,-22,-22,-22,-21,-21,-21,-21,-20,-20,-20,-20,-19,-19,-19,-19,-18,-18,-18,-18,-17,-17,-17,-17,-16,-16,-16,-16,-15,-15,-15,-15,-14,-14,-14,-14,-13,-13,-13,-13,-13,-12,-12,-12,-12,-11,-11,-11,-11,-10,-10,-10,-10,-10,-9,-9,-9,-9,-8,-8,-8,-8,-8,-7,-7,-7,-7,-6,-6,-6,-6,-6,-5,-5,-5,-5,-5,-4,-4,-4,-4,-4,-3,-3,-3,-3,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-0,-0,-0,-0,-0,-0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21};
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h b/targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h
new file mode 100644
index 00000000000..24e7eab2058
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/def_tmp.h
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+
+#define SAMPLES_PER_FRM 76800
+#define SAMPLES_PER_FRM_USRP 62500
+#define SAMPLES_PER_SLOT 3840
+#define SAMPLES_PER_SLOT_USRP 6250
+#define HW_offset 32
+#define N_slot_offset 4
+#define T_start 3840*20*100
+
+void format_printf(int flag,const char * fmt, ...)
+{
+	if(flag)
+	{
+		va_list args;
+		va_start(args,fmt);
+		vprintf(fmt,args);
+		va_end(args);
+	}
+}
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/lte-softmodem-usrp_tmp.c b/targets/ARCH/USRP/USERSPACE/LIB/lte-softmodem-usrp_tmp.c
new file mode 100644
index 00000000000..295c1b0647d
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/lte-softmodem-usrp_tmp.c
@@ -0,0 +1,1360 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface
+  Copyright(c) 1999 - 2011 Eurecom
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information
+  Openair Admin: openair_admin@eurecom.fr
+  Openair Tech : openair_tech@eurecom.fr
+Forums       : http://forums.eurecom.fsr/openairinterface
+Address      : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
+
+ *******************************************************************************/
+
+/*! \file lte-softmodem.c
+ * \brief main program to control HW and scheduling
+ * \author R. Knopp, F. Kaltenberger
+ * \date 2012
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
+ * \note
+ * \warning
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define __USE_GNU
+//#define _GNU_SOURCE
+#include <sched.h>
+#include <signal.h>
+#include <execinfo.h>
+#include <getopt.h>
+//#include <windows.h>
+#include <errno.h>
+
+#include "rt_wrapper.h"
+
+#ifdef EMOS
+#include <gps.h>
+#endif
+
+#include "PHY/types.h"
+#include "PHY/defs.h"
+#include "openair0_lib.h"
+
+#include "PHY/vars.h"
+#include "MAC_INTERFACE/vars.h"
+#include "SCHED/vars.h"
+#include "LAYER2/MAC/vars.h"
+
+#include "../../SIMU/USER/init_lte.h"
+
+#ifdef EMOS
+#include "SCHED/phy_procedures_emos.h"
+#endif
+
+#ifdef OPENAIR2
+#include "LAYER2/MAC/defs.h"
+#include "LAYER2/MAC/vars.h"
+#ifndef CELLULAR
+#include "RRC/LITE/vars.h"
+#endif
+#include "PHY_INTERFACE/vars.h"
+#endif
+
+#ifdef SMBV
+#include "PHY/TOOLS/smbv.h"
+unsigned short config_frames[4] = {2,9,11,13};
+#endif
+#include "UTIL/LOG/log_extern.h"
+#include "UTIL/OTG/otg.h"
+#include "UTIL/OTG/otg_vars.h"
+#include "UTIL/MATH/oml.h"
+#include "UTIL/LOG/vcd_signal_dumper.h"
+
+#ifdef XFORMS
+#include "PHY/TOOLS/lte_phy_scope.h"
+#include "stats.h"
+
+#include "../../ARCH/USRP/USERSPACE/LIB/def.h"
+#include "TOOLS/thread_ipc.c"
+
+#include <time.h>
+
+// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
+// at eNB 0, an UL scope for every UE 
+FD_lte_phy_scope_ue  *form_ue[NUMBER_OF_UE_MAX];
+FD_lte_phy_scope_enb *form_enb[NUMBER_OF_UE_MAX];
+FD_stats_form *form_stats=NULL;
+char title[255];
+unsigned char scope_enb_num_ue = 1;
+#endif //XFORMS
+
+#define FRAME_PERIOD 100000000ULL
+#define DAQ_PERIOD 66667ULL
+
+//#define rt_printk printf
+
+#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
+
+#ifdef RTAI //by super
+static SEM *mutex;
+//static CND *cond;
+
+static int thread0;
+static int thread1;
+static int thread_recv;
+//static int sync_thread;
+#else
+pthread_t thread0;
+pthread_t thread1;
+pthread_t thread_recv;
+pthread_attr_t attr_dlsch_threads;
+struct sched_param sched_param_dlsch;
+#endif
+
+pthread_t  thread2;
+pthread_t  thread3;
+pthread_t  tid_eNB;
+pthread_t  tid_recv;
+pthread_t  thread_tx_error;
+pthread_attr_t attr;
+
+pthread_mutex_t mutex_eNB;
+pthread_cond_t cond_eNB;
+
+int ret;
+
+// ------------------------------------
+// functions and variables for USRP
+// ------------------------------------
+extern int oai_tx_buff[SAMPLES_PER_FRM];
+extern int oai_rx_buff[SAMPLES_PER_FRM];
+extern void UHD_init(void);
+extern void UHD_init_display(void);
+extern void Init_send(void);
+extern void Init_recv(void);
+extern void set_freq(int freq_offset);
+extern void send_data(int hw_slot_offset);
+extern void recv_data(int hw_slot_offset);
+extern void send_end();
+extern void tx_errorcode_handler(void);
+
+int tx_offset = 0;
+int hw_slot_offset = 0;
+
+extern volatile unsigned long long tx_timestamp,rx_timestamp,clock_usrp;
+
+extern volatile int flag_recv,flag_clock;
+extern volatile int recv_ready;
+extern volatile int w_pos_usrp_rcv; // value range [0:76800-1]
+extern volatile int w_slot_usrp_rcv, r_slot_usrp_send; // slot index for USRP thread. value range [0:19]
+extern volatile int r_slot_idx, t_slot_idx; // slot index for eNB thread. value range [0;19]
+extern volatile int send_slot_missed;
+
+double time_diff1,time_diff2,time_diff3,time_diff4;
+struct timespec time_1, time_2,time_3,time_4,time_5;
+
+// USRP debug output control
+extern int g_usrp_debug;
+
+//add for program run limit times
+int N_slot_cycle;
+
+// -----------------------------------
+// Ctrl+c control
+// -----------------------------------
+int oai_exit = 0;
+void sig_int_handler(void);
+
+int card = 0;
+exmimo_config_t *p_exmimo_config;
+exmimo_id_t     *p_exmimo_id;
+volatile unsigned int *DAQ_MBOX;
+
+//int time_offset[4] = {-138,-138,-138,-138};
+//int time_offset[4] = {-145,-145,-145,-145};
+int time_offset[4] = {0,0,0,0};
+
+int fs4_test=0;
+char UE_flag;
+u8  eNB_id=0,UE_id=0;
+
+u32 carrier_freq[4]= {1907600000,1907600000,1907600000,1907600000};
+
+struct timing_info_t {
+	//unsigned int frame, hw_slot, last_slot, next_slot;
+	RTIME time_min, time_max, time_avg, time_last, time_now;
+	//unsigned int mbox0, mbox1, mbox2, mbox_target;
+	unsigned int n_samples;
+} timing_info;
+
+extern s16* sync_corr_ue0;
+extern s16 prach_ifft[4][1024*2];
+
+
+runmode_t mode;
+int rx_input_level_dBm;
+#ifdef XFORMS
+extern int otg_enabled;
+#else
+int otg_enabled;
+#endif
+int number_of_cards = 1;
+
+int mbox_bounds[20] = {8,16,24,30,38,46,54,60,68,76,84,90,98,106,114,120,128,136,144, 0}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers
+
+int init_dlsch_threads(void);
+void cleanup_dlsch_threads(void);
+s32 init_rx_pdsch_thread(void);
+void cleanup_rx_pdsch_thread(void);
+int init_ulsch_threads(void);
+void cleanup_ulsch_threads(void);
+
+LTE_DL_FRAME_PARMS *frame_parms;
+
+void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier);
+void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier);
+void test_config(int card, int ant, unsigned int rf_mode, int UE_flag);
+
+unsigned int build_rflocal(txi, txq, rxi, rxq)
+{
+	return (txi + (txq<<6) + (rxi<<12) + (rxq<<18));
+}
+unsigned int build_rfdc(int dcoff_i_rxfe, int dcoff_q_rxfe)
+{
+	return (dcoff_i_rxfe + (dcoff_q_rxfe<<8));
+}
+
+void signal_handler(int sig)
+{
+	void *array[10];
+	size_t size;
+
+	if (sig==SIGSEGV) {
+		// get void*'s for all entries on the stack
+		size = backtrace(array, 10);
+
+		// print out all the frames to stderr
+		fprintf(stderr, "Error: signal %d:\n", sig);
+		backtrace_symbols_fd(array, size, 2);
+		exit(-1);
+	}
+	else {
+		oai_exit=1;
+	}
+}
+
+void exit_fun(const char* s)
+{
+	void *array[10];
+	size_t size;
+
+	printf("Exiting: %s\n",s);
+
+	oai_exit=1;
+	//rt_sleep_ns(FRAME_PERIOD);
+
+	//exit (-1);
+}
+
+int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
+
+void sig_int_handler(void)
+{
+	oai_exit = 1;
+}
+
+// -----------------------------------
+// USRP tx underflow test
+// -----------------------------------
+void *tx_error_handler(void *ptr)
+{
+	(void)ptr;
+	while (!oai_exit)
+	{
+		tx_errorcode_handler();	
+	}
+	pthread_exit(NULL);		
+}
+
+// -----------------------------------
+// USRP send and receive thread
+// -----------------------------------
+void *recv_all(void *ptr)
+{
+	(void)ptr;
+	bind_thread2kernel(1);
+	int i=0;
+
+	// continuous receiving 
+	while (!oai_exit)
+	{	
+		// receive one slot-len
+		recv_data(hw_slot_offset);
+		// send one slot
+		send_data(hw_slot_offset);
+		i++; if(i==N_slot_cycle) oai_exit=1;//control run N_slot_cycle slot and exit
+	}
+
+	send_end();
+	printf("[rcv thread] Received oai_exit signal. Ends. send slot missed: %d\n",send_slot_missed);
+	printf("hw_slot_offset = %d\n",hw_slot_offset);//test hw_slot_offset value
+	pthread_exit(NULL);		
+}
+
+/* This is the main eNB thread. It gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */
+static void *eNB_thread(void *arg)
+	//void eNB_thread(void)
+{
+	printf("Start eNB Server...\n\n");
+
+	bind_thread2kernel(2);
+#ifdef RTAI
+	RT_TASK *task;
+#endif
+	int slot=0,last_slot, next_slot,frame=0;
+	unsigned int aa,slot_offset, slot_offset_F;
+	int diff = 0;
+	int i;
+	int num_slot_missed = 0;
+
+#ifdef RTAI
+	task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
+	LOG_D(HW,"Started eNB thread (id %p)\n",task);
+	//if(task==NULL) printf("RT Task creation failed\n"); else printf("Task success!\n");
+#endif
+	mlockall(MCL_CURRENT | MCL_FUTURE);
+
+#ifdef HARD_RT
+	rt_make_hard_real_time();
+#endif
+
+	// initialize reading postition
+	r_slot_idx = 0;
+	t_slot_idx = 0;
+	frame = 0;
+
+	while (!oai_exit)
+	{
+		format_printf(g_usrp_debug,"[eNB ] r_eNB: %d w_usrp: %d num_slot_missed: %d diff: %d\n",r_slot_idx,w_slot_usrp_rcv, num_slot_missed,diff);
+
+		// Update 'diff'. Handle the frame wrap-arround
+		if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
+			diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
+		}
+		else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
+			diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
+		}
+		else{
+			diff = r_slot_idx - w_slot_usrp_rcv;
+		}
+
+		// Reading is too slow. It's already late. 
+		if(diff < -4)
+		{
+			r_slot_idx++;
+			num_slot_missed += abs(diff + 4);
+			if(r_slot_idx==20){
+				r_slot_idx = 0;
+				frame++;
+			}
+			continue;
+		}
+
+		// Wait for writing
+		while((diff > 0)&& (!oai_exit))
+		{
+			usleep(500);
+			// Update 'diff'. Handle the frame wrap-arround
+			if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
+				diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
+			}
+			else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
+				diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
+			}
+			else{
+				diff = r_slot_idx - w_slot_usrp_rcv;
+			}
+		}
+
+		// The slot is ready
+		last_slot = r_slot_idx;
+		next_slot = (r_slot_idx + N_slot_offset)%LTE_SLOTS_PER_FRAME;
+		format_printf(g_usrp_debug, "[eNB ] r_eNB: %d w_usrp: %d last_slot: %d next_slot: %d diff: %d\n\n",r_slot_idx,w_slot_usrp_rcv,last_slot, next_slot,diff);
+
+		//---------------------------
+		// eNB procedure
+		//---------------------------
+		PHY_vars_eNB_g[0]->frame = frame;
+		//if (frame>5)
+		{
+			if (fs4_test==0)
+				// -- PHY procedure --
+			{
+				//phy_procedures_eNB_lte(last_slot, next_slot, PHY_vars_eNB_g[0], 0);//for OAI version berfore 4160
+				phy_procedures_eNB_lte(last_slot, next_slot, PHY_vars_eNB_g[0], 0,0);
+#ifndef IFFT_FPGA
+				slot_offset_F = (next_slot)*
+					(PHY_vars_eNB_g[0]->lte_frame_parms.ofdm_symbol_size)*
+					((PHY_vars_eNB_g[0]->lte_frame_parms.Ncp==1) ? 6 : 7);//0for normal 7,1 for extened 6
+				slot_offset = (next_slot)*
+					(PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti>>1);
+
+				if ((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_DL)||
+						((subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms,next_slot>>1)==SF_S)&&((next_slot&1)==0)))
+				{
+
+					for (aa=0; aa<PHY_vars_eNB_g[0]->lte_frame_parms.nb_antennas_tx; aa++)
+					{
+						if (PHY_vars_eNB_g[0]->lte_frame_parms.Ncp == 1)
+						{
+							PHY_ofdm_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
+#ifdef BIT8_TX
+									&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset>>1],
+#else
+									dummy_tx_buffer,//&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset],
+#endif
+									PHY_vars_eNB_g[0]->lte_frame_parms.log2_symbol_size,
+									6,
+									PHY_vars_eNB_g[0]->lte_frame_parms.nb_prefix_samples,
+									PHY_vars_eNB_g[0]->lte_frame_parms.twiddle_ifft,
+									PHY_vars_eNB_g[0]->lte_frame_parms.rev,
+									CYCLIC_PREFIX);
+						}
+						else
+						{
+							normal_prefix_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
+#ifdef BIT8_TX
+									&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset>>1],
+#else
+									dummy_tx_buffer,//&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][slot_offset],
+#endif
+									7,
+									&(PHY_vars_eNB_g[0]->lte_frame_parms));
+						}
+						//else
+						//{
+						//	normal_prefix_mod(&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdataF[0]     [aa][slot_offset_F],
+						//			&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa     ][slot_offset>>1],
+						//			7,
+						//			&(PHY_vars_eNB_g[0]->lte_frame_parms));
+						//}
+
+#ifdef EXMIMO
+						for (i=0; i<PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti/2; i++) 
+						{
+							tx_offset = (int)slot_offset+time_offset[aa]+i;
+							if (tx_offset<0)
+								tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti;
+							if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti))
+								tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti;
+							((short*)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]=
+								((short*)dummy_tx_buffer)[2*i]<<4;
+							((short*)&PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]=
+								((short*)dummy_tx_buffer)[2*i+1]<<4;
+							//printf("txdata = %d ",PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa][tx_offset]);
+						}
+#endif //EXMIMO					
+					}
+				}
+			}// end of PHY procedure
+
+#endif //IFFT_FPGA
+
+		}// end of frame>5
+
+		// update slot index
+		t_slot_idx = next_slot; // this slot is ready to send
+		r_slot_idx++;
+		if(r_slot_idx==20)
+		{
+			r_slot_idx = 0;
+			frame++;
+		}
+	}// end of while
+
+	format_printf(1,"\n[eNB thread] Received oai_exit signal. Ends. Ran %d frames. num_slot_missed: %d\n",frame, num_slot_missed);
+
+
+#ifdef HARD_RT
+	rt_make_soft_real_time();
+#endif
+
+	// clean task
+#ifdef RTAI
+	rt_task_delete(task);
+#endif
+	rt_printk("Task deleted. returning\n");
+	return 0;
+}
+
+
+/* This is the main UE thread. Initially it is doing a periodic get_frame. One synchronized it gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */
+static void *UE_thread(void *arg)
+{
+	printf("Start UE Client...\n\n");
+
+	bind_thread2kernel(2);
+#ifdef RTAI
+	RT_TASK *task;
+#endif
+	int slot=0,last_slot, next_slot,frame=0;
+	unsigned int aa,slot_offset, slot_offset_F;
+	int diff = 0;
+	int i;
+	int num_slot_missed = 0;
+
+	static int is_synchronized = 0;
+	static int received_slots = 0;
+	static int slot0 = 0;
+	static int first_run=1;
+
+#ifdef RTAI
+	task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
+	LOG_D(HW,"Started UE thread (id %p)\n",task);
+	//if(task==NULL) printf("RT Task creation failed\n"); else printf("Task success!\n");
+#endif
+	mlockall(MCL_CURRENT | MCL_FUTURE);
+
+#ifdef HARD_RT
+	rt_make_hard_real_time();
+#endif
+
+	// initialize reading postition
+	r_slot_idx = 0;
+	t_slot_idx = 0;
+	frame = 0;
+
+	openair_daq_vars.freq_offset = 0; //-7500;
+	set_freq(openair_daq_vars.freq_offset);
+
+	if (mode == rx_calib_ue) {
+		openair_daq_vars.freq_offset = -7500;
+		set_freq(openair_daq_vars.freq_offset);
+	}
+
+	usleep(10000*(7.68/6.25));//wait frame data fill in buff
+	//test synchronized or not
+	char test_synchronize = 1;
+
+	while (!oai_exit)
+	{
+
+		if (is_synchronized)
+		{	
+			//test is synchronized or not
+			if(test_synchronize) {printf("Found cell ,UE synchronized!  hw_slot_offset = %d\n",hw_slot_offset); test_synchronize = 0;}
+
+			format_printf(g_usrp_debug,"[UE ] r_ue: %d w_usrp: %d num_slot_missed: %d diff: %d\n",r_slot_idx,w_slot_usrp_rcv, num_slot_missed,diff);
+
+			// Update 'diff'. Handle the frame wrap-arround
+			if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
+				diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
+			}
+			else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
+				diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
+			}
+			else{
+				diff = r_slot_idx - w_slot_usrp_rcv;
+			}
+
+			// Reading is too slow. It's already late. 
+			if(diff < -4)
+			{
+				r_slot_idx++;
+				num_slot_missed += abs(diff + 4);
+				if(r_slot_idx==20){
+					r_slot_idx = 0;
+					frame++;
+				}
+				continue;
+			}
+
+			// Wait for writing
+			while((diff > 0)&& (!oai_exit))
+			{
+				usleep(500);
+				// Update 'diff'. Handle the frame wrap-arround
+				if ((w_slot_usrp_rcv<4)&&(r_slot_idx>=16)){
+					diff = r_slot_idx - (w_slot_usrp_rcv + 20) ;
+				}
+				else if((w_slot_usrp_rcv>=16)&&(r_slot_idx<4)){
+					diff = (r_slot_idx + 20) - w_slot_usrp_rcv;
+				}
+				else{
+					diff = r_slot_idx - w_slot_usrp_rcv;
+				}
+			}
+
+			// The slot is ready
+			last_slot = r_slot_idx;
+			next_slot = (r_slot_idx + N_slot_offset)%LTE_SLOTS_PER_FRAME;
+			format_printf(g_usrp_debug, "[UE ] r_ue: %d w_usrp: %d last_slot: %d next_slot: %d diff: %d\n\n",r_slot_idx,w_slot_usrp_rcv,last_slot, next_slot,diff);
+
+
+			PHY_vars_UE_g[0]->frame = frame;
+
+			//phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[0], 0, 0,mode);//for OAI version after 4160
+			phy_procedures_UE_lte (last_slot, next_slot, PHY_vars_UE_g[0], 0, 0,mode,0);
+
+			// update slot index
+			t_slot_idx = next_slot; // this slot is ready to send
+			r_slot_idx++;
+			if(r_slot_idx==20)
+			{
+				r_slot_idx = 0;
+				frame++;
+			}
+		}
+		else   // we are not yet synchronized
+		{
+
+			hw_slot_offset = 0;
+
+			slot = 0;
+
+			if (initial_sync(PHY_vars_UE_g[0],mode)==0) {
+
+				if (mode == rx_calib_ue) {
+					oai_exit=1;
+				}
+				else {
+					is_synchronized = 1;
+					hw_slot_offset = PHY_vars_UE_g[0]->rx_offset;
+					//hw_slot_offset = (PHY_vars_UE_g[0]->rx_offset<<1) / PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti;
+					LOG_D(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset);
+				}
+			}
+			else {
+				if (openair_daq_vars.freq_offset >= 0) {
+					openair_daq_vars.freq_offset += 100;
+					openair_daq_vars.freq_offset *= -1;
+				}
+				else {
+					openair_daq_vars.freq_offset *= -1;
+				}	      
+				if (abs(openair_daq_vars.freq_offset) > 7500) {
+					LOG_I(PHY,"[initial_sync] No cell synchronization found, abondoning\n");
+					mac_xface->macphy_exit("");
+					oai_exit = 1;
+				}
+				else {
+					LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",openair_daq_vars.freq_offset);
+					set_freq(openair_daq_vars.freq_offset);
+				}
+			}
+		}
+	}
+
+	LOG_D(HW,"UE_thread: finished, ran %d times.\n",frame);
+
+	format_printf(1,"\n[UE thread] Received oai_exit signal. Ends. Ran %d frames. num_slot_missed: %d\n",frame, num_slot_missed);
+#ifdef HARD_RT
+	rt_make_soft_real_time();
+#endif
+
+	// clean task
+#ifdef RTAI
+	rt_task_delete(task);
+#endif
+	LOG_D(HW,"Task deleted. returning\n");
+	return 0;
+}
+
+
+
+
+
+int main(int argc, char **argv) 
+{
+#ifdef RTAI
+	RT_TASK *task;
+#endif
+	int i,j,aa;
+	void *status;
+
+	/*
+	   u32 rf_mode_max[4]     = {55759,55759,55759,55759};
+	   u32 rf_mode_med[4]     = {39375,39375,39375,39375};
+	   u32 rf_mode_byp[4]     = {22991,22991,22991,22991};
+	 */
+	u32 my_rf_mode = RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX;
+	u32 my_rf_mode2 = RXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX;
+	u32 rf_mode[4]     = {my_rf_mode,my_rf_mode2,0,0};
+	u32 rf_local[4]    = {8255000,8255000,8255000,8255000}; // UE zepto
+	//{8254617, 8254617, 8254617, 8254617}; //eNB khalifa
+	//{8255067,8254810,8257340,8257340}; // eNB PETRONAS
+
+	u32 rf_vcocal[4]   = {910,910,910,910};
+	u32 rf_vcocal_850[4] = {2015, 2015, 2015, 2015};
+	u32 rf_rxdc[4]     = {32896,32896,32896,32896};
+	u32 rxgain[4]      = {20,20,20,20};
+	u32 txgain[4]      = {25,25,25,25};
+
+	u16 Nid_cell = 0;
+	u8  cooperation_flag=0, transmission_mode=1, abstraction_flag=0;
+	u8 beta_ACK=0,beta_RI=0,beta_CQI=2;
+
+	int c;
+	char do_forms=0;
+	unsigned int fd;
+	unsigned int tcxo = 114;
+
+	int amp;
+	u8 prach_fmt;
+	int N_ZC;
+
+	char rxg_fname[100];
+	char txg_fname[100];
+	char rflo_fname[100];
+	char rfdc_fname[100];
+	FILE *rxg_fd=NULL;
+	FILE *txg_fd=NULL;
+	FILE *rflo_fd=NULL;
+	FILE *rfdc_fd=NULL;
+	unsigned int rxg_max[4]={133,133,133,133}, rxg_med[4]={127,127,127,127}, rxg_byp[4]={120,120,120,120};
+	int tx_max_power=0;
+
+	char line[1000];
+	int l;
+	int ret, ant;
+
+	int error_code;
+
+	const struct option long_options[] = {
+		{"calib-ue-rx", required_argument, NULL, 256},
+		{"calib-ue-rx-med", required_argument, NULL, 257},
+		{"calib-ue-rx-byp", required_argument, NULL, 258},
+		{"debug-ue-prach", no_argument, NULL, 259},
+		{"no-L2-connect", no_argument, NULL, 260},
+		{NULL, 0, NULL, 0}};
+
+	mode = normal_txrx;
+
+
+	while ((c = getopt_long (argc, argv, "C:ST:UdF:V:Dn:",long_options,NULL)) != -1)
+	{
+		switch (c)
+		{
+			case 'D':
+				printf("Enable debug output. \n\n");
+				g_usrp_debug = 1;
+				break;
+			case 'V':
+				ouput_vcd = 1;
+				break;
+			case 'd':
+				do_forms=1;
+				break;
+			case 'U':
+				UE_flag = 1;
+				break;
+			case 'C':
+				carrier_freq[0] = atoi(optarg);
+				carrier_freq[1] = atoi(optarg);
+				carrier_freq[2] = atoi(optarg);
+				carrier_freq[3] = atoi(optarg);
+				break;
+			case 'S':
+				fs4_test=1;
+				break;
+			case 'T':
+				tcxo=atoi(optarg);
+				break;
+			case 'n':
+				N_slot_cycle=atoi(optarg);
+				break;
+			case 'F':
+				sprintf(rxg_fname,"%srxg.lime",optarg);
+				rxg_fd = fopen(rxg_fname,"r");
+				if (rxg_fd) {
+					printf("Loading RX Gain parameters from %s\n",rxg_fname);
+					l=0;
+					while (fgets(line, sizeof(line), rxg_fd)) {
+						if ((strlen(line)==0) || (*line == '#')) continue; //ignore empty or comment lines
+						else {
+							if (l==0) sscanf(line,"%d %d %d %d",&rxg_max[0],&rxg_max[1],&rxg_max[2],&rxg_max[3]);
+							if (l==1) sscanf(line,"%d %d %d %d",&rxg_med[0],&rxg_med[1],&rxg_med[2],&rxg_med[3]);
+							if (l==2) sscanf(line,"%d %d %d %d",&rxg_byp[0],&rxg_byp[1],&rxg_byp[2],&rxg_byp[3]);
+							l++;
+						}
+					}
+				}
+				else 
+					printf("%s not found, running with defaults\n",rxg_fname);
+
+				sprintf(txg_fname,"%stxg.lime",optarg);
+				txg_fd = fopen(txg_fname,"r");
+				if (txg_fd) {
+					printf("Loading TX Gain parameters from %s\n",txg_fname);
+					l=0;
+					while (fgets(line, sizeof(line), txg_fd)) {
+						if ((strlen(line)==0) || (*line == '#')) {
+							continue; //ignore empty or comment lines
+						}
+						else {
+							if (l==0) sscanf(line,"%d %d %d %d",&txgain[0],&txgain[1],&txgain[2],&txgain[3]);
+							if (l==1) sscanf(line,"%d",&tx_max_power);
+							l++;
+						}
+					}
+				}
+				else 
+					printf("%s not found, running with defaults\n",txg_fname);
+
+				sprintf(rflo_fname,"%srflo.lime",optarg);
+				rflo_fd = fopen(rflo_fname,"r");
+				if (rflo_fd) {
+					printf("Loading RF LO parameters from %s\n",rflo_fname);
+					fscanf(rflo_fd,"%d %d %d %d",&rf_local[0],&rf_local[1],&rf_local[2],&rf_local[3]);
+				}
+				else 
+					printf("%s not found, running with defaults\n",rflo_fname);
+
+				sprintf(rfdc_fname,"%srfdc.lime",optarg);
+				rfdc_fd = fopen(rfdc_fname,"r");
+				if (rfdc_fd) {
+					printf("Loading RF DC parameters from %s\n",rfdc_fname);
+					fscanf(rfdc_fd,"%d %d %d %d",&rf_rxdc[0],&rf_rxdc[1],&rf_rxdc[2],&rf_rxdc[3]);
+				}
+				else 
+					printf("%s not found, running with defaults\n",rfdc_fname);
+
+				break;
+			case 256:
+				mode = rx_calib_ue;
+				rx_input_level_dBm = atoi(optarg);
+				printf("Running with UE calibration on (LNA max), input level %d dBm\n",rx_input_level_dBm);
+				break;
+			case 257:
+				mode = rx_calib_ue_med;
+				rx_input_level_dBm = atoi(optarg);
+				printf("Running with UE calibration on (LNA med), input level %d dBm\n",rx_input_level_dBm);
+				break;
+			case 258:
+				mode = rx_calib_ue_byp;
+				rx_input_level_dBm = atoi(optarg);
+				printf("Running with UE calibration on (LNA byp), input level %d dBm\n",rx_input_level_dBm);
+				break;
+			case 259:
+				mode = debug_prach;
+				break;
+			case 260:
+				mode = no_L2_connect;
+				break;
+			default:
+				break;
+		}
+	}
+
+	if (UE_flag==1)
+		printf("configuring for UE\n");
+	else
+		printf("configuring for eNB\n");
+
+	//randominit (0);
+	set_taus_seed (0);
+
+	// initialize the log (see log.h for details)
+	logInit();
+
+	if (ouput_vcd) {
+		if (UE_flag==1)
+			vcd_signal_dumper_init("/tmp/openair_dump_UE.vcd");
+		else
+			vcd_signal_dumper_init("/tmp/openair_dump_eNB.vcd");
+	}
+
+#ifdef NAS_NETLINK
+	netlink_init();
+#endif
+
+	// to make a graceful exit when ctrl-c is pressed
+	//signal(SIGSEGV, signal_handler);
+	//signal(SIGINT, signal_handler);
+
+#ifndef RTAI
+	check_clock();
+#endif
+
+	// init the parameters
+	frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS));
+	frame_parms->N_RB_DL            = 25;
+	frame_parms->N_RB_UL            = 25;
+	frame_parms->Ncp                = 0;
+	frame_parms->Ncp_UL             = 0;
+	frame_parms->Nid_cell           = Nid_cell;
+	frame_parms->nushift            = 0;
+	frame_parms->nb_antennas_tx_eNB = 1; //initial value overwritten by initial sync later
+	// frame_parms->nb_antennas_tx     = (UE_flag==0) ? 1 : 1;
+	// frame_parms->nb_antennas_rx     = (UE_flag==0) ? 1 : 1;
+	frame_parms->nb_antennas_tx     = 1;
+	frame_parms->nb_antennas_rx     = 1;
+	frame_parms->mode1_flag         = (transmission_mode == 1) ? 1 : 0;
+	frame_parms->frame_type         = 1;
+	frame_parms->tdd_config         = 3;
+	frame_parms->tdd_config_S       = 0;
+	frame_parms->phich_config_common.phich_resource = oneSixth;
+	frame_parms->phich_config_common.phich_duration = normal;
+	// UL RS Config
+	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
+	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 0;
+	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0;
+	frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0;
+
+	//print [PHY] ... message
+	init_ul_hopping(frame_parms);
+
+	//print [PHY][I][INIT]... message
+	init_frame_parms(frame_parms,1);
+
+	phy_init_top(frame_parms);
+	phy_init_lte_top(frame_parms);
+
+	//init prach for openair1 test
+	frame_parms->prach_config_common.rootSequenceIndex=22; 
+	frame_parms->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig=1;
+	frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex=0; 
+	frame_parms->prach_config_common.prach_ConfigInfo.highSpeedFlag=0;
+	frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0;
+	prach_fmt = get_prach_fmt(frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
+			frame_parms->frame_type);
+	N_ZC = (prach_fmt <4)?839:139;
+
+	if (UE_flag==1) {
+#ifdef OPENAIR2
+		g_log->log_component[PHY].level = LOG_INFO;
+#else
+		g_log->log_component[PHY].level = LOG_INFO;
+#endif
+		g_log->log_component[PHY].flag  = LOG_HIGH;
+		g_log->log_component[MAC].level = LOG_INFO;
+		g_log->log_component[MAC].flag  = LOG_HIGH;
+		g_log->log_component[RLC].level = LOG_INFO;
+		g_log->log_component[RLC].flag  = LOG_HIGH;
+		g_log->log_component[PDCP].level = LOG_INFO;
+		g_log->log_component[PDCP].flag  = LOG_HIGH;
+		g_log->log_component[OTG].level = LOG_INFO;
+		g_log->log_component[OTG].flag  = LOG_HIGH;
+		g_log->log_component[RRC].level = LOG_INFO;
+		g_log->log_component[RRC].flag  = LOG_HIGH;
+
+		PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE*));
+		//print [PHY][I][init_lte_eNB]... messages
+		PHY_vars_UE_g[0] = init_lte_UE(frame_parms, UE_id,abstraction_flag,transmission_mode);
+
+#ifndef OPENAIR2
+		for (i=0;i<NUMBER_OF_eNB_MAX;i++) {
+			PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
+			PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_RI_Index  = beta_RI;
+			PHY_vars_UE_g[0]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
+
+			PHY_vars_UE_g[0]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = UE_id;
+			PHY_vars_UE_g[0]->scheduling_request_config[i].sr_ConfigIndex = 7+(UE_id%3);
+			PHY_vars_UE_g[0]->scheduling_request_config[i].dsr_TransMax = sr_n4;
+		}
+#endif
+
+		compute_prach_seq(&PHY_vars_UE_g[0]->lte_frame_parms.prach_config_common,
+				PHY_vars_UE_g[0]->lte_frame_parms.frame_type,
+				PHY_vars_UE_g[0]->X_u);
+
+		PHY_vars_UE_g[0]->lte_ue_pdcch_vars[0]->crnti = 0x1234;
+#ifndef OPENAIR2
+		PHY_vars_UE_g[0]->lte_ue_pdcch_vars[0]->crnti = 0x1235;
+#endif
+		NB_UE_INST=1;
+		NB_INST=1;
+
+		openair_daq_vars.manual_timing_advance = 0;
+		//openair_daq_vars.timing_advance = TIMING_ADVANCE_HW;
+		openair_daq_vars.rx_gain_mode = DAQ_AGC_OFF;
+		openair_daq_vars.auto_freq_correction = 0;
+		openair_daq_vars.use_ia_receiver = 1;
+
+		// if AGC is off, the following values will be used
+		//    for (i=0;i<4;i++) 
+		//    rxgain[i] = 20;
+		rxgain[0] = 20;
+		rxgain[1] = 20;
+		rxgain[2] = 20;
+		rxgain[3] = 20;
+
+		for (i=0;i<4;i++) {
+			PHY_vars_UE_g[0]->rx_gain_max[i] = rxg_max[i];
+			PHY_vars_UE_g[0]->rx_gain_med[i] = rxg_med[i];
+			PHY_vars_UE_g[0]->rx_gain_byp[i] = rxg_byp[i];
+		}
+
+		if ((mode == normal_txrx) || (mode == rx_calib_ue) || (mode == no_L2_connect) || (mode == debug_prach)) {
+			for (i=0; i<4; i++) {
+				PHY_vars_UE_g[0]->rx_gain_mode[i]  = max_gain;
+				//            frame_parms->rfmode[i] = rf_mode_max[i];
+				rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMax;
+			}
+			PHY_vars_UE_g[0]->rx_total_gain_dB =  PHY_vars_UE_g[0]->rx_gain_max[0] + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain
+		}
+		else if ((mode == rx_calib_ue_med)) {
+			for (i=0; i<4; i++) {
+				PHY_vars_UE_g[0]->rx_gain_mode[i] = med_gain;
+				//            frame_parms->rfmode[i] = rf_mode_med[i];
+				rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMed;
+			}
+			PHY_vars_UE_g[0]->rx_total_gain_dB =  PHY_vars_UE_g[0]->rx_gain_med[0]  + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain;
+		}
+		else if ((mode == rx_calib_ue_byp)) {
+			for (i=0; i<4; i++) {
+				PHY_vars_UE_g[0]->rx_gain_mode[i] = byp_gain;
+				//            frame_parms->rfmode[i] = rf_mode_byp[i];
+				rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAByp;
+			}
+			PHY_vars_UE_g[0]->rx_total_gain_dB =  PHY_vars_UE_g[0]->rx_gain_byp[0]  + rxgain[0] - 30; //-30 because it was calibrated with a 30dB gain;
+		}
+
+		PHY_vars_UE_g[0]->tx_power_max_dBm = tx_max_power;
+
+		printf("tx_max_power = %d -> amp %d\n",tx_max_power,get_tx_amp(tx_max_power,tx_max_power));
+	}
+	else { //this is eNB
+#ifdef OPENAIR2
+		g_log->log_component[PHY].level = LOG_INFO;
+#else
+		g_log->log_component[PHY].level = LOG_INFO;
+#endif
+		g_log->log_component[PHY].flag  = LOG_HIGH;
+
+		g_log->log_component[MAC].level = LOG_INFO;
+		g_log->log_component[MAC].flag  = LOG_HIGH;
+		g_log->log_component[RLC].level = LOG_INFO;
+		g_log->log_component[RLC].flag  = LOG_HIGH;
+		g_log->log_component[PDCP].level = LOG_INFO;
+		g_log->log_component[PDCP].flag  = LOG_HIGH;
+		g_log->log_component[OTG].level = LOG_INFO;
+		g_log->log_component[OTG].flag  = LOG_HIGH;
+		g_log->log_component[RRC].level = LOG_INFO;
+		g_log->log_component[RRC].flag  = LOG_HIGH;
+
+
+		PHY_vars_eNB_g = malloc(sizeof(PHY_VARS_eNB*));
+		PHY_vars_eNB_g[0] = init_lte_eNB(frame_parms,eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag);
+
+#ifndef OPENAIR2
+		for (i=0;i<NUMBER_OF_UE_MAX;i++) {
+			PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
+			PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_RI_Index  = beta_RI;
+			PHY_vars_eNB_g[0]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
+
+			PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = i;
+			PHY_vars_eNB_g[0]->scheduling_request_config[i].sr_ConfigIndex = 7+(i%3);
+			PHY_vars_eNB_g[0]->scheduling_request_config[i].dsr_TransMax = sr_n4;
+		}
+#endif
+
+		compute_prach_seq(&PHY_vars_eNB_g[0]->lte_frame_parms.prach_config_common,
+				PHY_vars_eNB_g[0]->lte_frame_parms.frame_type,
+				PHY_vars_eNB_g[0]->X_u);
+
+		NB_eNB_INST=1;
+		NB_INST=1;
+
+		openair_daq_vars.ue_dl_rb_alloc=0x1fff;
+		openair_daq_vars.target_ue_dl_mcs=20;
+		openair_daq_vars.ue_ul_nb_rb=6;
+		openair_daq_vars.target_ue_ul_mcs=9;
+
+		// if AGC is off, the following values will be used
+		//    for (i=0;i<4;i++) 
+		//      rxgain[i]=30;
+		rxgain[0] = 20;
+		rxgain[1] = 20;
+		rxgain[2] = 20;
+		rxgain[3] = 20;
+
+
+		// set eNB to max gain
+		PHY_vars_eNB_g[0]->rx_total_gain_eNB_dB =  rxg_max[0] + rxgain[0] - 30; //was measured at rxgain=30;
+		for (i=0; i<4; i++) {
+			//        frame_parms->rfmode[i] = rf_mode_max[i];
+			rf_mode[i] = (rf_mode[i] & (~LNAGAINMASK)) | LNAMax;
+		}
+
+
+	}
+
+	dump_frame_parms(frame_parms);
+
+	mac_xface = malloc(sizeof(MAC_xface));
+
+#ifdef OPENAIR2
+	int eMBMS_active=0;
+
+	//print [MAC][I]... messages
+	//l2_init(frame_parms,eMBMS_active);
+	l2_init(frame_parms,eMBMS_active,
+			0); // cba_group_active
+	if (UE_flag == 1)
+		mac_xface->dl_phy_sync_success (0, 0, 0, 1);
+	else
+		mac_xface->mrbch_phy_sync_failure (0, 0, 0);
+#endif
+
+	mac_xface->macphy_exit = &exit_fun;
+
+#ifdef OPENAIR2
+	//if (otg_enabled) {
+	init_all_otg(0);
+	g_otg->seed = 0;
+	init_seeds(g_otg->seed);
+	g_otg->num_nodes = 2;
+	for (i=0; i<g_otg->num_nodes; i++){
+		for (j=0; j<g_otg->num_nodes; j++){ 
+			g_otg->application_idx[i][j] = 1;
+			//g_otg->packet_gen_type=SUBSTRACT_STRING;
+			g_otg->aggregation_level[i][j][0]=1;
+			g_otg->application_type[i][j][0] = BCBR; //MCBR, BCBR
+		}
+	}
+	init_predef_traffic();
+
+	//USRP INIT
+	UHD_init();
+	UHD_init_display();
+	Init_send();
+	Init_recv();
+	printf("USRP init DONE...\n");
+	//  }
+#endif
+	// connect the TX/RX buffers
+	if (UE_flag==1) {
+		setup_ue_buffers(PHY_vars_UE_g[0],frame_parms,0);
+		printf("Setting UE buffer to all-RX\n");
+	}
+	else {
+		setup_eNB_buffers(PHY_vars_eNB_g[0],frame_parms,0);
+		if (fs4_test==0)
+		{
+			printf("Setting eNB buffer to all-RX\n");
+		}
+		else {
+			printf("Setting eNB buffer to fs/4 test signal\n");
+			for (j=0; j<PHY_vars_eNB_g[0]->lte_frame_parms.samples_per_tti*10; j+=4)
+				for (aa=0; aa<frame_parms->nb_antennas_tx; aa++)
+				{
+					amp = 0x8000;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+1] = 0;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+3] = amp-1;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+5] = 0;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+7] = amp;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j] = amp-1;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+2] = 0;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+4] = amp;
+					((short*)PHY_vars_eNB_g[0]->lte_eNB_common_vars.txdata[0][aa])[2*j+6] = 0;
+				}
+		}
+	}
+
+	//rt_sleep_ns(10*FRAME_PERIOD);//delay one second
+
+#ifndef RTAI
+	pthread_attr_init (&attr_dlsch_threads);
+	pthread_attr_setstacksize(&attr_dlsch_threads,OPENAIR_THREAD_STACK_SIZE);
+	//attr_dlsch_threads.priority = 1;
+	sched_param_dlsch.sched_priority = sched_get_priority_max(SCHED_FIFO); //OPENAIR_THREAD_PRIORITY;
+	pthread_attr_setschedparam  (&attr_dlsch_threads, &sched_param_dlsch);
+	pthread_attr_setschedpolicy (&attr_dlsch_threads, SCHED_FIFO);
+#endif
+
+	// start the main thread
+	if (UE_flag == 1) {
+#ifdef RTAI
+		thread1 = rt_thread_create(UE_thread, NULL, 100000000);
+		thread_recv = rt_thread_create(recv_all, NULL, 100000000);
+#else
+		error_code = pthread_create(&thread1, &attr_dlsch_threads, UE_thread, NULL);
+		if (error_code!= 0) {
+			LOG_D(HW,"[lte-softmodem.c] Could not allocate UE_thread, error %d\n",error_code);
+			return(error_code);
+		}
+		else {
+			LOG_D(HW,"[lte-softmodem.c] Allocate UE_thread successful\n");
+		}
+		pthread_create(&thread_recv, NULL, recv_all, NULL);
+#endif
+#ifdef DLSCH_THREAD//defined
+		init_rx_pdsch_thread();
+		//rt_sleep_ns(FRAME_PERIOD/10);
+		init_dlsch_threads();
+#endif
+	}
+	else {
+#ifdef RTAI
+		thread0 = rt_thread_create(eNB_thread, NULL, 100000000);
+		thread_recv = rt_thread_create(recv_all, NULL, 100000000);
+#else
+		error_code = pthread_create(&thread0, &attr_dlsch_threads, eNB_thread, NULL);
+		if (error_code!= 0) {
+			LOG_D(HW,"[lte-softmodem.c] Could not allocate eNB_thread, error %d\n",error_code);
+			return(error_code);
+		}
+		else {
+			LOG_D(HW,"[lte-softmodem.c] Allocate eNB_thread successful\n");
+		}
+		pthread_create(&thread_recv, NULL, recv_all, NULL);
+#endif
+#ifdef ULSCH_THREAD//not defined
+		init_ulsch_threads();
+#endif
+	}
+	pthread_create(&thread_tx_error, NULL, tx_error_handler, NULL);
+
+	// wait for end of program
+	usleep(500);
+	printf("TYPE <CTRL-C> TO TERMINATE\n");
+	signal(SIGINT, &sig_int_handler);
+
+	getchar();
+	oai_exit=1;
+
+	// cleanup
+	pthread_join(thread_tx_error,&status);
+
+	if (UE_flag == 1) {
+#ifdef RTAI
+		rt_thread_join(thread1);
+		rt_thread_join(thread_recv);
+#else
+		pthread_join(thread1,&status);
+		pthread_join(thread_recv,&status);
+#endif
+#ifdef DLSCH_THREAD
+		printf("waiting for DLSCH_THREAD thread\n");
+		cleanup_dlsch_threads();
+		cleanup_rx_pdsch_thread();
+#endif
+	}
+	else {
+#ifdef RTAI
+		rt_thread_join(thread0);
+		rt_thread_join(thread_recv);
+#else
+		pthread_join(thread0,&status);
+		pthread_join(thread_recv,&status);
+#endif
+#ifdef ULSCH_THREAD
+		printf("waiting for ULSCH_THREAD thread\n");
+		cleanup_ulsch_threads();
+#endif
+	}
+
+
+	logClean();
+
+	printf("Program Done!\n");
+	return 0;
+}
+
+void test_config(int card, int ant, unsigned int rf_mode, int UE_flag) 
+{
+	p_exmimo_config->framing.eNB_flag   = !UE_flag;
+	p_exmimo_config->framing.tdd_config = 0;
+	p_exmimo_config->framing.resampling_factor = 2;
+
+	p_exmimo_config->rf.rf_freq_rx[ant] = 1907600000;
+	p_exmimo_config->rf.rf_freq_tx[ant] = 1907600000;;
+	p_exmimo_config->rf.rx_gain[ant][0] = 20;
+	p_exmimo_config->rf.tx_gain[ant][0] = 10;
+	p_exmimo_config->rf.rf_mode[ant] = rf_mode;
+
+	p_exmimo_config->rf.rf_local[ant] = build_rflocal(20,25,26,04);
+	p_exmimo_config->rf.rf_rxdc[ant] = build_rfdc(128, 128);
+	p_exmimo_config->rf.rf_vcocal[ant] = (0xE<<6) + 0xE;
+}
+
+void setup_ue_buffers(PHY_VARS_UE *phy_vars_ue, LTE_DL_FRAME_PARMS *frame_parms, int carrier) {
+
+	int i;
+	if (phy_vars_ue) {
+
+		if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) {
+			printf("RX antennas > 1 and carrier > 0 not possible\n");
+			exit(-1);
+		}
+
+		if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) {
+			printf("TX antennas > 1 and carrier > 0 not possible\n");
+			exit(-1);
+		}
+
+		// replace RX signal buffers with mmaped HW versions
+		for (i=0;i<frame_parms->nb_antennas_rx;i++) {
+			free(phy_vars_ue->lte_ue_common_vars.rxdata[i]);
+			phy_vars_ue->lte_ue_common_vars.rxdata[i] = (s32*) oai_rx_buff;
+			printf("rxdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.rxdata[i]);
+		}
+		for (i=0;i<frame_parms->nb_antennas_tx;i++) {
+			free(phy_vars_ue->lte_ue_common_vars.txdata[i]);
+			phy_vars_ue->lte_ue_common_vars.txdata[i] = (s32*) oai_tx_buff;
+			printf("txdata[%d] @ %p\n",i,phy_vars_ue->lte_ue_common_vars.txdata[i]);
+		}
+	}
+}
+void setup_eNB_buffers(PHY_VARS_eNB *phy_vars_eNB, LTE_DL_FRAME_PARMS *frame_parms, int carrier) {
+
+	int i;
+	if (phy_vars_eNB) {
+		if ((frame_parms->nb_antennas_rx>1) && (carrier>0)) {
+			printf("RX antennas > 1 and carrier > 0 not possible\n");
+			exit(-1);
+		}
+
+		if ((frame_parms->nb_antennas_tx>1) && (carrier>0)) {
+			printf("TX antennas > 1 and carrier > 0 not possible\n");
+			exit(-1);
+		}
+
+		// replace RX signal buffers with mmaped HW versions
+		for (i=0;i<frame_parms->nb_antennas_rx;i++) {
+			free(phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
+			phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i] = (s32 *) oai_rx_buff;
+			printf("rxdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i]);
+			/* for (j=0;j<16;j++) {
+			   printf("rxbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j]);
+			   phy_vars_eNB->lte_eNB_common_vars.rxdata[0][i][j] = 16-j;
+			   }*/
+		}
+		for (i=0;i<frame_parms->nb_antennas_tx;i++) {
+			free(phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
+			phy_vars_eNB->lte_eNB_common_vars.txdata[0][i] = (s32 *) oai_tx_buff;
+			printf("txdata[%d] @ %p\n",i,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i]);
+			/*  for (j=0;j<16;j++) {
+			    printf("txbuffer %d: %x\n",j,phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j]);
+			    phy_vars_eNB->lte_eNB_common_vars.txdata[0][i][j] = 16-j;
+			    }*/
+		}
+	}
+}
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp_tmp.cpp b/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp_tmp.cpp
new file mode 100644
index 00000000000..6b7a58a30aa
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/openair_usrp_tmp.cpp
@@ -0,0 +1,436 @@
+#include <string.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <uhd/utils/thread_priority.hpp>
+#include <uhd/usrp/multi_usrp.hpp>
+#include <boost/format.hpp>
+#include <iostream>
+#include <complex>
+#include <fstream>
+#include <cmath>
+#include "def.h"
+
+// --------------------------------
+// headers for polyphaseResample
+// --------------------------------
+#include "polyphaseResample.h"
+#include "coeff_3072_to_25.h"
+#include "coeff_25_to_3072.h"
+
+using namespace std;
+using std::ofstream;
+using std::ifstream;
+
+// --------------------------------
+// contant variables
+// --------------------------------
+#define PI 3.1415926535898
+#define SAM_RATE 6.25e6 // 6.25e6 = 100e6/16
+#define DL_FREQ 880e6
+#define UL_FREQ 835e6
+
+// --------------------------------
+// variables for polyphaseResample
+// --------------------------------
+const int OUTRATE = 625;
+const int INRATE = 768;
+int *g_branch_table;
+int *g_offset_table;
+short Rx_history[625*2];
+short Tx_history[768*2];
+
+// --------------------------------
+// variables for USRP configuration
+// --------------------------------
+uhd::usrp::multi_usrp::sptr tx_usrp;
+uhd::usrp::multi_usrp::sptr rx_usrp;
+
+//create a send streamer and a receive streamer
+uhd::stream_args_t stream_args_short("sc16");//complex short
+uhd::stream_args_t stream_args_float("fc32");//complex float
+uhd::tx_streamer::sptr tx_stream;
+uhd::rx_streamer::sptr rx_stream;
+
+uhd::tx_metadata_t tx_md;
+uhd::rx_metadata_t rx_md;
+
+//setup variables and allocate buffer
+uhd::async_metadata_t async_md;
+
+double tx_timeout;
+double rx_timeout;
+
+double rx_freq;
+
+uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
+
+// --------------------------------
+// variables for OAI buffers
+// --------------------------------
+int oai_tx_buff[SAMPLES_PER_FRM];
+int oai_rx_buff[SAMPLES_PER_FRM];
+int oai_rx_buff_temp[SAMPLES_PER_FRM_USRP];
+int oai_tx_buff_temp[SAMPLES_PER_FRM_USRP];
+volatile unsigned long long tx_timestamp,rx_timestamp,clock_usrp,tmp_clock;
+volatile int w_pos_usrp_rcv = 0; // value range [0:76800-1]
+volatile int r_pos_usrp_send = 0; // value range [0:76800-1]
+volatile int w_slot_usrp_rcv, r_slot_usrp_send; // slot index for USRP thread. value range [0:19]
+volatile int r_slot_idx, t_slot_idx; // slot index for eNB thread. value range [0;19]
+volatile int send_slot_missed = 0;
+
+// --------------------------------
+// Debug and output control
+// --------------------------------
+int g_usrp_debug=0;
+int num_underflows=0;
+int num_overflows=0;
+int num_seq_errors=0;
+
+
+extern "C"
+{
+	void UHD_init(void);
+	void UHD_init_display(void);
+	void Init_send(void);
+	void Init_recv(void);
+	void send_data(int hw_slot_offset);
+	void recv_data(int hw_slot_offset);
+	void send_end(void);
+	void set_freq(int freq_offset);
+	char UE_flag;
+	void tx_errorcode_handler(void);
+	void sig_int_handler(void);
+}
+void Rx_resample(void);
+void Tx_resample(void);
+
+// --------------------------------
+// USRP initial 
+// --------------------------------
+void UHD_init(void)
+{
+	uhd::set_thread_priority_safe();
+	std::string args = "send_frame_size=3840,recv_frame_size=3840";
+	uhd::device_addrs_t device_addr = uhd::device::find(args);
+	if (device_addr.size() == 0 )
+	{
+		std::cerr<<"No USRP Device Found"<<std::endl;
+		exit(1);
+	}	
+	else
+		std::cout<<"USRP Device Found"<<std::endl<<device_addr[0].to_pp_string()<<std::endl;
+	tx_usrp = uhd::usrp::multi_usrp::make(args);
+	rx_usrp = uhd::usrp::multi_usrp::make(args);
+
+	tx_stream = tx_usrp->get_tx_stream(stream_args_short);
+	rx_stream = rx_usrp->get_rx_stream(stream_args_short);
+
+	//Lock mboard clocks
+	tx_usrp->set_clock_source("internal");
+	rx_usrp->set_clock_source("internal");
+
+	tx_usrp->set_tx_rate(SAM_RATE);
+	if(UE_flag)
+		tx_usrp->set_tx_freq(UL_FREQ);
+	else
+		tx_usrp->set_tx_freq(DL_FREQ);
+	tx_usrp->set_tx_gain(0);
+	tx_usrp->set_tx_bandwidth(25e6);
+	tx_usrp->set_tx_antenna("TX/RX");
+
+	rx_usrp->set_rx_rate(SAM_RATE);
+	if(UE_flag)
+	{
+		rx_usrp->set_rx_freq(DL_FREQ);
+		rx_freq = DL_FREQ;
+	}
+	else
+	{
+		rx_usrp->set_rx_freq(UL_FREQ);
+		rx_freq = UL_FREQ;
+	}
+	rx_usrp->set_rx_gain(0);
+	rx_usrp->set_rx_bandwidth(25e6);
+	rx_usrp->set_rx_antenna("RX2");
+
+	std::cout <<std::endl<< boost::format("Setting device timestamp to 0...") << std::endl;
+	tx_usrp->set_time_now(uhd::time_spec_t(0.0));
+	rx_usrp->set_time_now(uhd::time_spec_t(0.0));
+}
+
+// --------------------------------
+// USRP information display
+// --------------------------------
+void UHD_init_display(void)
+{
+	std::cout << std::endl<<boost::format("Actual TX sample rate: %fMSps...") % (tx_usrp->get_tx_rate()/1e6) << std::endl;
+	std::cout << boost::format("Actual RX sample rate: %fMSps...") % (rx_usrp->get_rx_rate()/1e6) << std::endl;
+
+	std::cout << boost::format("Actual TX frequency: %fGHz...") % (tx_usrp->get_tx_freq()/1e9) << std::endl;
+	std::cout << boost::format("Actual RX frequency: %fGHz...") % (rx_usrp->get_rx_freq()/1e9) << std::endl;
+
+	std::cout << boost::format("Actual TX gain: %f...") % (tx_usrp->get_tx_gain()) << std::endl;
+	std::cout << boost::format("Actual RX gain: %f...") % (rx_usrp->get_rx_gain()) << std::endl;
+
+	std::cout << boost::format("Actual TX bandwidth: %fM...") % (tx_usrp->get_tx_bandwidth()/1e6) << std::endl;
+	std::cout << boost::format("Actual RX bandwidth: %fM...") % (rx_usrp->get_rx_bandwidth()/1e6) << std::endl;
+
+	std::cout << boost::format("Actual TX antenna: %s...") % (tx_usrp->get_tx_antenna()) << std::endl;
+	std::cout << boost::format("Actual RX antenna: %s...") % (rx_usrp->get_rx_antenna()) << std::endl;
+
+	std::cout << boost::format("Device TX timestamp: %f...") % (tx_usrp->get_time_now().get_real_secs()) << std::endl;
+	std::cout << boost::format("Device RX timestamp: %f...") % (rx_usrp->get_time_now().get_real_secs()) << std::endl << std::endl;
+}
+
+// -----------------------
+//send init
+// -----------------------
+void Init_send(void)
+{
+	//reset send buffer
+	memset(oai_tx_buff , 0 , sizeof(oai_tx_buff));
+
+	//reset Tx_history
+	memset(Tx_history, 0, sizeof(Tx_history));
+
+	// the first slot sent shoud be the 0+N_slot_offset. 
+	r_slot_usrp_send = N_slot_offset; 
+	//send constantly
+	tx_md.start_of_burst = false;
+	tx_md.end_of_burst = false;
+	tx_md.has_time_spec = true;
+	tx_timestamp = T_start + r_slot_usrp_send * SAMPLES_PER_SLOT;
+	tx_md.time_spec = uhd::time_spec_t::from_ticks(tx_timestamp,SAM_RATE);
+	tx_timeout = tx_timestamp/SAM_RATE + 0.1;
+}
+
+// -----------------------
+//receive init
+// -----------------------
+void Init_recv(void)
+{
+	//reset receive buffer
+	memset(oai_rx_buff , 0 , sizeof(oai_rx_buff));
+
+	//reset Rx_history
+	memset(Rx_history, 0, sizeof(Rx_history));
+
+	// initialize the rx stream
+	stream_cmd.stream_now = false;//When true, the device will begin streaming ASAP. When false, the device will begin streaming at a time specified by time_spec. 
+	stream_cmd.num_samps = 0;
+	rx_timestamp = T_start + HW_offset;//Device timestamp and time of send sample 
+	stream_cmd.time_spec = uhd::time_spec_t::from_ticks(rx_timestamp,SAM_RATE);
+	rx_usrp->issue_stream_cmd(stream_cmd);
+
+	//the first call to recv() will block this many seconds before receiving
+	rx_timeout = rx_timestamp/SAM_RATE + 0.1; //timeout (delay before receive + padding)
+
+	// the first clock number = rx_timestamp
+	clock_usrp = rx_timestamp;
+	w_pos_usrp_rcv = 0;
+	w_slot_usrp_rcv = 19;
+}
+
+// -----------------------
+// send function
+// -----------------------
+void send_data(int hw_slot_offset)
+{
+
+	int diff;
+	// Handle the frame wrap-arround
+	if ((r_slot_usrp_send<4)&&(t_slot_idx>=16)){
+		diff = t_slot_idx - (r_slot_usrp_send + 20) ;
+	}
+	else if((r_slot_usrp_send>=16)&&(t_slot_idx<4)){
+		diff = (t_slot_idx + 20) - r_slot_usrp_send;
+	}
+	else{
+		diff = t_slot_idx - r_slot_usrp_send;
+	}
+	format_printf(g_usrp_debug, "[send] diff: %d\n",diff);
+	if (diff<0){}
+	else if (diff>1)
+	{
+		format_printf(g_usrp_debug, "Sending is late\n");
+		r_slot_usrp_send = t_slot_idx;
+		// count the missed sending slots
+		send_slot_missed += (diff - 1);
+	}
+	else // diff = 0,1
+	{
+		for (int ii=0;ii<diff+1;ii++)
+		{
+
+			format_printf(g_usrp_debug,"[send] r_usrp: %d t_slot: %d w_usrp: %d w_pos_usrp_rcv: %d\n", r_slot_usrp_send,t_slot_idx,w_slot_usrp_rcv, w_pos_usrp_rcv);
+			format_printf(g_usrp_debug,"[send] clock_usrp: %llu tx_timestamp: %llu\n", clock_usrp, tx_timestamp);
+
+			Tx_resample();
+
+			// sending
+			size_t num_tx_samps;
+			r_pos_usrp_send = (t_slot_idx * SAMPLES_PER_SLOT + hw_slot_offset) % SAMPLES_PER_FRM;
+			if((r_pos_usrp_send + SAMPLES_PER_SLOT) <= SAMPLES_PER_FRM)
+			{
+				memcpy((& oai_tx_buff_temp[0]) , (& oai_tx_buff[r_pos_usrp_send]) , SAMPLES_PER_SLOT*4 );
+				//num_tx_samps = tx_stream->send((& oai_tx_buff[r_pos_usrp_send]), SAMPLES_PER_SLOT_USRP, tx_md, tx_timeout);
+			}
+			else
+			{
+				int tmp_len = SAMPLES_PER_FRM - r_pos_usrp_send;
+				//num_tx_samps = tx_stream->send((& oai_tx_buff[r_pos_usrp_send]), tmp_len, tx_md, tx_timeout);
+				memcpy((& oai_tx_buff_temp[0]) , (& oai_tx_buff[r_pos_usrp_send]) , tmp_len*4 );
+				//num_tx_samps = tx_stream->send((& oai_tx_buff[0]),SAMPLES_PER_SLOT_USRP - tmp_len, tx_md, tx_timeout);
+				memcpy((& oai_tx_buff_temp[tmp_len]) , (& oai_tx_buff[0]) , (SAMPLES_PER_SLOT - tmp_len)*4 );
+			}
+	
+			num_tx_samps = tx_stream->send((& oai_tx_buff_temp[0]), SAMPLES_PER_SLOT_USRP, tx_md, tx_timeout);
+
+			//without timestamp
+			tx_md.has_time_spec = false;
+
+			tx_timeout = 0.1;
+
+			r_slot_usrp_send++;
+			if(r_slot_usrp_send==20) r_slot_usrp_send=0;
+
+		}
+	}
+}
+
+// --------------------------------
+// handle TX error codes
+// --------------------------------
+void tx_errorcode_handler(void){
+	if (not tx_stream->recv_async_msg(async_md)) {}
+	else{
+		switch(async_md.event_code){
+			case uhd::async_metadata_t::EVENT_CODE_BURST_ACK:
+				return;
+			case uhd::async_metadata_t::EVENT_CODE_UNDERFLOW:
+				format_printf(g_usrp_debug,"[send] USRP TX UNDERFLOW!\n");
+				num_underflows++;
+				break;
+			case uhd::async_metadata_t::EVENT_CODE_UNDERFLOW_IN_PACKET:
+				format_printf(g_usrp_debug,"[send] USRP TX UNDERFLOW IN_PACKET!\n");
+				break;
+			case uhd::async_metadata_t::EVENT_CODE_SEQ_ERROR:
+			case uhd::async_metadata_t::EVENT_CODE_SEQ_ERROR_IN_BURST:
+				num_seq_errors++;
+				break;
+			default:
+				//std::cerr << "Event code: " << async_md.event_code << std::endl;
+				//std::cerr << "Unexpected event on async recv, continuing..." << std::endl;
+				break;
+		}
+	}
+}
+// -----------------------
+// send end of burst
+// -----------------------
+void send_end()
+{
+	//send a mini EOB packet
+	tx_md.end_of_burst = true;
+	tx_stream->send("", 0, tx_md);
+	tx_md.end_of_burst = false;
+	format_printf(1,"num_underflows: %d   num_overflows: %d   num_seq_errors: %d\n",num_underflows,num_overflows,num_seq_errors);
+}
+
+// -----------------------
+// receive function
+// -----------------------
+void recv_data(int hw_slot_offset)
+{
+	size_t num_rx_samps;
+
+	//volatile unsigned long long tmp_clock;
+	num_rx_samps = rx_stream->recv((&oai_rx_buff_temp[0]), SAMPLES_PER_SLOT_USRP,rx_md,rx_timeout);
+	Rx_resample();
+
+	//after the first receiving, reset the timeout value
+	rx_timeout = 0.1; 
+	tmp_clock = rx_md.time_spec.to_ticks(SAM_RATE);
+
+	// Update writing position
+	w_pos_usrp_rcv = (w_pos_usrp_rcv + (int)(tmp_clock - clock_usrp))%SAMPLES_PER_FRM;
+
+	// Copy data into the PHY layer buffer
+	if((w_pos_usrp_rcv+num_rx_samps) <= SAMPLES_PER_FRM){ 
+		memcpy(& oai_rx_buff[w_pos_usrp_rcv],& oai_rx_buff_temp[0],num_rx_samps*sizeof(int));
+	}
+	else{
+		int tmp_len = SAMPLES_PER_FRM - w_pos_usrp_rcv;
+		memcpy(& oai_rx_buff[w_pos_usrp_rcv],& oai_rx_buff_temp[0],tmp_len*sizeof(int));
+		memcpy(& oai_rx_buff[0],& oai_rx_buff_temp[tmp_len],(num_rx_samps-tmp_len)*sizeof(int));
+	}
+
+	w_slot_usrp_rcv = (w_pos_usrp_rcv - hw_slot_offset + num_rx_samps - SAMPLES_PER_SLOT)%SAMPLES_PER_FRM / SAMPLES_PER_SLOT;
+
+	// update clock
+	clock_usrp = tmp_clock;
+
+	// show log
+	format_printf(g_usrp_debug,"[recv] w_pos: %d num_rx_samps=%d clock_usrp=%llu w_usrp: %d\n",w_pos_usrp_rcv,num_rx_samps,clock_usrp,w_slot_usrp_rcv);
+
+	//handle the error code
+	switch(rx_md.error_code){
+		case uhd::rx_metadata_t::ERROR_CODE_NONE:
+			break;
+		case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW:
+			format_printf(g_usrp_debug,"[recv] USRP RX OVERFLOW!\n");
+			num_overflows++;
+			break;
+		case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT:
+			format_printf(g_usrp_debug, "[recv] USRP RX TIMEOUT!\n");
+			break;
+		default:
+			format_printf(g_usrp_debug, "[recv] Unexpected error on RX, Error code: 0x%x\n",rx_md.error_code);    
+			break;
+	}
+}
+
+// -----------------------
+// set RX frequency in UE
+// -----------------------
+void set_freq(int freq_offset)
+{
+	rx_usrp->set_rx_freq(rx_freq + freq_offset);
+}
+
+// -----------------------
+// Rx_resample
+// -----------------------
+void Rx_resample(void)
+{
+	short Rx_data_in[6250+625*2];
+	short Rx_data_out[7680+768*2];
+	memset(Rx_data_in, 0, sizeof(Rx_data_in));
+	memset(Rx_data_out, 0, sizeof(Rx_data_out));
+
+	memcpy(Rx_data_in, Rx_history, 625*4);
+	memcpy(Rx_data_in+625*2, & oai_rx_buff_temp[0], 3125*4);
+
+	polyphaseResample(Rx_data_in, sizeof(Rx_data_in) / sizeof(short) / 2 ,Rx_data_out , sizeof(Rx_data_out) / sizeof(short) / 2 , coeff_25_to_3072, sizeof(coeff_25_to_3072) / sizeof(short), INRATE, OUTRATE, 13, g_branch_table, g_offset_table);
+	memcpy(& oai_rx_buff_temp[0], Rx_data_out+768*2, 3840*4);
+	memcpy(Rx_history, Rx_data_in+6250-625*2, 625*4);
+}
+
+// -----------------------
+// Tx_resample
+// -----------------------
+void Tx_resample(void)
+{
+	short Tx_data_out[6250+625*2];
+	short Tx_data_in[7680+768*2];
+	memset(Tx_data_in, 0, sizeof(Tx_data_in));
+	memset(Tx_data_out, 0, sizeof(Tx_data_out));
+
+	memcpy(Tx_data_in, Tx_history, 768*4);
+	memcpy(Tx_data_in+768*2, & oai_tx_buff_temp[0], 3840*4);
+
+	polyphaseResample(Tx_data_in, sizeof(Tx_data_in) / sizeof(short) / 2 ,Tx_data_out , sizeof(Tx_data_out) / sizeof(short) / 2 , coeff_3072_to_25, sizeof(coeff_3072_to_25) / sizeof(short) , OUTRATE, INRATE, 11, g_branch_table, g_offset_table);
+	memcpy((& oai_tx_buff_temp[0]) , Tx_data_out+625*2, 3125*4);
+	memcpy(Tx_history, Tx_data_in+7680-768*2, 768*4);
+}
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp b/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp
new file mode 100644
index 00000000000..b06dc0c5cdf
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.cpp
@@ -0,0 +1,61 @@
+#include "polyphaseResample.h"
+#include <iostream>
+#include <stdio.h>
+using namespace std;
+
+// table_len should be decied by the length of the filter output
+// but a default value of 50000 is adequate for our app
+void buildPolyphaseCache(const int P, const int Q, int *&branch_table, int *&offset_table, const int table_len) {
+	branch_table = new int[table_len];
+	offset_table = new int[table_len];
+	for (int i = 0; i < table_len; ++i) {
+		branch_table[i] = (i * Q) % P;
+		offset_table[i] = (i * Q - branch_table[i]) / P;
+	}
+}
+
+void polyphaseResample(short *in_data, unsigned int in_sample_count,
+		short *out_data, unsigned int out_sample_count,
+		short *filter_coeff, unsigned int filter_len,
+		const int P, const int Q, const unsigned int fix_shift,
+		int *branch_table, int *offset_table) {
+	buildPolyphaseCache( P, Q, branch_table, offset_table, 50000);
+	// calculate the sample count of output
+	out_sample_count = (int)(in_sample_count * (float)P / (float)Q);
+
+	short *output_ptr = out_data;
+	unsigned int output_ix = 0;
+	short const *input_end = in_data + in_sample_count * 2;
+	short const *output_end = out_data + out_sample_count * 2;
+	short const *filter_end = filter_coeff + filter_len;
+	while (output_ptr < output_end) 
+	{
+		int output_branch = branch_table[output_ix];
+		int input_offset = offset_table[output_ix];
+
+		short *input_ptr = in_data + 2 * input_offset;
+		short *filter_ptr = filter_coeff + output_branch;
+
+		while (input_ptr >= input_end) {
+			input_ptr -= 2;
+			filter_ptr += P;
+		}
+
+		int sum_real = 0, sum_imag = 0;
+		while ((input_ptr >= in_data) && (filter_ptr < filter_end)) {
+			sum_real += (int)(*input_ptr) * (int)(*filter_ptr);
+			sum_imag += (int)(*(input_ptr + 1)) * (int)(*filter_ptr);
+			input_ptr -= 2;
+			filter_ptr += P;
+		}
+
+		*output_ptr = (short)(sum_real >> fix_shift);
+		*(output_ptr + 1) = (short)(sum_imag >> fix_shift);
+
+		output_ptr += 2;
+		output_ix++;
+	}
+}
+
+
+
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.h b/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.h
new file mode 100644
index 00000000000..3eb79855250
--- /dev/null
+++ b/targets/ARCH/USRP/USERSPACE/LIB/polyphaseResample.h
@@ -0,0 +1,26 @@
+#ifndef _POLYPHASERESAMPLE_H_
+#include <cmath>
+//#include "coeff_3072_to_25.h"
+
+void buildPolyphaseCache(const int P, const int Q, int *&branch_table, int *&offset_table, const int filter_len = 50000);
+
+
+/**
+ * @brief polyphase resampler
+ * @param in_data input data, layout as [real,imag,real,imag...]
+ * @param in_sample_count count of input samples, i.e. a complex 
+ *        cosisting of two short int counts as one
+ * @param out_data output data, layout same as in_data
+ * @param out_sample_count sample count of result, as return
+ * @param filter_coeff filter with only real coeffcients
+ * @param filter_len count of coeffcients
+ * @param P order of upper sampling
+ * @param Q order of down sampling
+ **/
+
+void polyphaseResample(short *in_data, unsigned int in_sample_count,
+    short *out_data, unsigned int out_sample_count,
+    short *filter_coeff, unsigned int filter_len,
+    const int P, const int Q, const unsigned int fix_shift,
+    int *branch_table, int *offset_table);
+#endif
\ No newline at end of file
-- 
GitLab