function p(a){var b=a.substring(10).split(",");g(b);d.getData(0|b[1],function(a){e[0|b[0]]+=a})}function q(a){g(a);var b=a[0];a=a.substr(3);"CONNECT OK"==a?c[b]=!0:"CONNECT FAIL"==a?c[b]=void 0:"CLOSED"==a?c[b]=void 0:"SEND OK"!=a&&"SEND FAIL"==a&&(c[b]=void 0);k=!1;return""}function h(a,b){return new Promise(function(c,f){var l="";d.cmd(a+"\r\n",b||1E3,function r(b){if(void 0===b||"ERROR"==b)f(a+": "+b?b:"TIMEOUT");else if("OK"==b)c(l);else return l+=(l?"\n":"")+b,r})})}var d,c=[],e= " ".split(" "),k=!1,g=function(){},t={create:function(a,b){function m(a){d.cmd("AT+QIOPEN="+f+',"TCP",'+JSON.stringify(a)+","+b+"\r\n",1E4,function(a){"OK"!=a&&(c[f]=void 0,k=!1)})}var f=0;if(void 0===a)return g("Server not implemented"),-1;for(;void 0!==c[f];)f++;if(6<=f)throw Error("No free sockets.");c[f]="Wait";e[f]="";k=!0;a.match(/\d+.\d+.\d+.\d+/)?m(a):(g("Lookup host "+a),d.cmd("AT+QIDNSGIP="+JSON.stringify(a)+"\r\n",1E4,function(a){if("OK"==a)return function(a){m(a)};c[f]=void 0;k=!1; g("Host not found")}));return f},close:function(a){c[a]&&d.cmd("AT+QICLOSE="+a+"\r\n",1E3,function(){c[a]=void 0})},accept:function(){return-1},recv:function(a,b){if(e[a]){if(e[a].length>b){var d=e[a].substr(0,b);e[a]=e[a].substr(b)}else d=e[a],e[a]="";return d}return c[a]?"":-1},send:function(a,b){if(k||d.isBusy()||"Wait"==c[a])return 0;if(!c[a])return-1;k=!0;d.write("AT+QISEND="+a+","+b.length+"\r\n");setTimeout(function(){d.write(b)},1E3);return b.length}},n={debug:function(a){g=a||void 0===a? function(a){print("[M35]",a)}:function(){};return{socks:c,sockData:e}},getVersion:function(a){h("AT+GMR").then(function(b){a(null,b)})["catch"](function(b){a(b)})},getIP:function(a){d.cmd("AT+QILOCIP\r\n",1E3,function(b){"ERROR"==b?a(b):a(null,b)})}};exports.connect=function(a,b,c){a.removeAllListeners();n.at=d=require("AT").connect(a);require("NetworkJS").create(t);d.registerLine("+RECEIVE",p);for(a=0;6>a;a++)d.registerLine(a+", ",q);d.registerLine("+CME ERROR",function(a){console.log(a)});h("ATE0").then(function(){return h("AT+CREG?")}).then(function(a){var b= a.split(",")[1];if(1!=b&&5!=b)throw Error("GSM not registered, "+a);g("Forcing GPRS connect");return h("AT+CGATT=1",1E4)}).then(function(){return h("AT+CGREG?")}).then(function(a){var b=a.split(",")[1];if(2==b)throw Error("GPRS still connecting, "+a);if(1!=b&&5!=b)throw Error("GPRS not registered, "+a);return h("AT+COPS?")}).then(function(a){var b=a.split(",")[2];if(!b)throw Error("No Operator, "+a);g("Operator "+b);return h("AT+QIMUX=1")}).then(function(){return h("AT+QIPROMPT=0")}).then(function(){c&& c(null)})["catch"](function(a){c&&c(a)});return n}