Built motion from commit 0c27b27.|1.0.11
[motion.git] / server / api / openchannel_queue / openchannel_queue.controller.js
index 3cadd58..62d0ee7 100644 (file)
@@ -1 +1 @@
-var _0x7a93=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72\x48\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x69\x64","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x51\x75\x65\x72\x79","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x70\x65\x6E\x61\x6C\x74\x79","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x20\x51\x75\x65\x75\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x65\x72\x72","\x65\x72\x72\x6F\x72","\x71\x75\x65\x75\x65","\x68\x61\x6E\x64\x6C\x65\x46\x6F\x72\x65\x69\x67\x6E\x4B\x65\x79\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x7a93[0];var _=require(_0x7a93[1]);var Util=require(_0x7a93[2]);var OpenchannelQueue=require(_0x7a93[4])[_0x7a93[3]];var User=require(_0x7a93[4])[_0x7a93[5]];var sequelize=require(_0x7a93[4])[_0x7a93[6]];var UserHasOpenchannelQueue=require(_0x7a93[4])[_0x7a93[7]];function handleError(_0x8617x8,_0x8617x9){return _0x8617x8[_0x7a93[9]](500)[_0x7a93[8]](_0x8617x9)}exports[_0x7a93[10]]= function(_0x8617xa,_0x8617x8){switch(_0x8617xa[_0x7a93[16]][_0x7a93[23]]){case _0x7a93[16]:return User[_0x7a93[17]](_0x8617xa[_0x7a93[16]][_0x7a93[15]],{attributes:[_0x7a93[15]]})[_0x7a93[12]](Util[_0x7a93[14]](_0x8617xa[_0x7a93[13]]))[_0x7a93[12]](function(_0x8617xb){_0x8617x8[_0x7a93[9]](200)[_0x7a93[8]](_0x8617xb)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)});default:return OpenchannelQueue[_0x7a93[22]](_0x7a93[21])[_0x7a93[20]](_[_0x7a93[19]](Util[_0x7a93[18]](_0x8617xa[_0x7a93[13]]),{distinct:true}))[_0x7a93[12]](function(_0x8617xb){_0x8617x8[_0x7a93[9]](200)[_0x7a93[8]](_0x8617xb)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})}};exports[_0x7a93[24]]= function(_0x8617xa,_0x8617x8){return OpenchannelQueue[_0x7a93[22]](_0x7a93[21])[_0x7a93[17]](_0x8617xa[_0x7a93[26]][_0x7a93[15]])[_0x7a93[12]](function(_0x8617xc){if(!_0x8617xc){return _0x8617x8[_0x7a93[25]](404)};return _0x8617x8[_0x7a93[8]](_0x8617xc)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})};exports[_0x7a93[27]]= function(_0x8617xa,_0x8617x8){return OpenchannelQueue[_0x7a93[17]](_0x8617xa[_0x7a93[26]][_0x7a93[15]])[_0x7a93[12]](function(_0x8617xe){if(!_0x8617xe){return _0x8617x8[_0x7a93[25]](404)};return _0x8617xe[_0x7a93[33]]({where:{role:_0x7a93[29]},attributes:[_0x7a93[15],_0x7a93[30],_0x7a93[31],_0x7a93[32]]})})[_0x7a93[12]](function(_0x8617xd){return _0x8617x8[_0x7a93[9]](200)[_0x7a93[8]]({rows:_0x8617xd,count:_0x8617xd[_0x7a93[28]]})})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})};exports[_0x7a93[34]]= function(_0x8617xa,_0x8617x8){return OpenchannelQueue[_0x7a93[34]](_0x8617xa[_0x7a93[37]])[_0x7a93[12]](function(_0x8617xc){return _0x8617x8[_0x7a93[9]](201)[_0x7a93[8]](_0x8617xc)})[_0x7a93[11]](sequelize.UniqueConstraintError,function(_0x8617x9){return Util[_0x7a93[36]][_0x7a93[35]](_0x8617x8,_0x8617x9)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})};exports[_0x7a93[38]]= function(_0x8617xa,_0x8617x8){if(_0x8617xa[_0x7a93[37]][_0x7a93[15]]){delete _0x8617xa[_0x7a93[37]][_0x7a93[15]]};return OpenchannelQueue[_0x7a93[17]](_0x8617xa[_0x7a93[26]][_0x7a93[15]])[_0x7a93[12]](function(_0x8617xc){if(!_0x8617xc){return _0x8617x8[_0x7a93[25]](404)};var _0x8617xf=_[_0x7a93[19]](_0x8617xc,_0x8617xa[_0x7a93[37]]);return _0x8617xf[_0x7a93[39]]()})[_0x7a93[12]](function(_0x8617xc){return _0x8617x8[_0x7a93[9]](200)[_0x7a93[8]](_0x8617xc)})[_0x7a93[11]](sequelize.UniqueConstraintError,function(_0x8617x9){return Util[_0x7a93[36]][_0x7a93[35]](_0x8617x8,_0x8617x9)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})};exports[_0x7a93[40]]= function(_0x8617xa,_0x8617x8,_0x8617x10){return OpenchannelQueue[_0x7a93[17]](_0x8617xa[_0x7a93[26]][_0x7a93[15]])[_0x7a93[12]](function(_0x8617xc){if(!_0x8617xc){return _0x8617x8[_0x7a93[25]](404)};var _0x8617x11=_[_0x7a93[43]](_0x8617xa[_0x7a93[37]][_0x7a93[41]],function(_0x8617x12){return {UserId:_0x8617x12,penalty:_0x8617xa[_0x7a93[37]][_0x7a93[42]],OpenchannelQueueId:_0x8617xc[_0x7a93[15]],queue:_0x8617xc[_0x7a93[30]]}});return UserHasOpenchannelQueue[_0x7a93[44]](_0x8617x11,{individualHooks:true})})[_0x7a93[12]](function(){return _0x8617x8[_0x7a93[25]](200)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})};exports[_0x7a93[45]]= function(_0x8617xa,_0x8617x8){return OpenchannelQueue[_0x7a93[17]](_0x8617xa[_0x7a93[26]][_0x7a93[15]])[_0x7a93[12]](function(_0x8617xc){if(_0x8617xc){return _0x8617xc[_0x7a93[46]](_0x8617xa[_0x7a93[13]][_0x7a93[41]],{individualHooks:true})}else {throw  new Error(_0x7a93[47])}})[_0x7a93[12]](function(){return _0x8617x8[_0x7a93[25]](202)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})};exports[_0x7a93[48]]= function(_0x8617xa,_0x8617x8){var _0x8617x13;return OpenchannelQueue[_0x7a93[17]](_0x8617xa[_0x7a93[26]][_0x7a93[15]])[_0x7a93[12]](function(_0x8617xc){_0x8617x13= _0x8617xc;if(!_0x8617xc){return _0x8617x8[_0x7a93[25]](404)};return _0x8617xc[_0x7a93[48]]()})[_0x7a93[12]](function(){return _0x8617x8[_0x7a93[25]](204)})[_0x7a93[11]](sequelize.ForeignKeyConstraintError,function(_0x8617x9){return Util[_0x7a93[36]][_0x7a93[52]](_0x8617x8,_0x7a93[51],_0x8617x13[_0x7a93[30]],_0x8617x9)})[_0x7a93[11]](function(_0x8617x9){console[_0x7a93[50]](_0x7a93[49],_0x8617x9);return handleError(_0x8617x8,_0x8617x9)})};exports[_0x7a93[53]]= function(_0x8617xa,_0x8617x8){return OpenchannelQueue[_0x7a93[48]]({where:{id:_0x8617xa[_0x7a93[13]][_0x7a93[54]]},individualHooks:true})[_0x7a93[12]](function(){return _0x8617x8[_0x7a93[25]](204)})[_0x7a93[11]](function(_0x8617x9){return handleError(_0x8617x8,_0x8617x9)})}
\ No newline at end of file
+var _0xcbaf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72\x48\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x69\x64","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x51\x75\x65\x72\x79","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x61\x67\x65\x6E\x74\x73","\x62\x6F\x64\x79","\x70\x65\x6E\x61\x6C\x74\x79","\x61\x64\x64\x55\x73\x65\x72\x73","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x20\x51\x75\x65\x75\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x65\x72\x72","\x65\x72\x72\x6F\x72","\x71\x75\x65\x75\x65","\x68\x61\x6E\x64\x6C\x65\x46\x6F\x72\x65\x69\x67\x6E\x4B\x65\x79\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xcbaf[0];var _=require(_0xcbaf[1]);var Util=require(_0xcbaf[2]);var OpenchannelQueue=require(_0xcbaf[4])[_0xcbaf[3]];var User=require(_0xcbaf[4])[_0xcbaf[5]];var sequelize=require(_0xcbaf[4])[_0xcbaf[6]];var UserHasOpenchannelQueue=require(_0xcbaf[4])[_0xcbaf[7]];function handleError(_0x84bex8,_0x84bex9){return _0x84bex8[_0xcbaf[9]](500)[_0xcbaf[8]](_0x84bex9)}exports[_0xcbaf[10]]= function(_0x84bexa,_0x84bex8){switch(_0x84bexa[_0xcbaf[16]][_0xcbaf[23]]){case _0xcbaf[16]:return User[_0xcbaf[17]](_0x84bexa[_0xcbaf[16]][_0xcbaf[15]],{attributes:[_0xcbaf[15]]})[_0xcbaf[12]](Util[_0xcbaf[14]](_0x84bexa[_0xcbaf[13]]))[_0xcbaf[12]](function(_0x84bexb){_0x84bex8[_0xcbaf[9]](200)[_0xcbaf[8]](_0x84bexb)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)});default:return OpenchannelQueue[_0xcbaf[22]](_0xcbaf[21])[_0xcbaf[20]](_[_0xcbaf[19]](Util[_0xcbaf[18]](_0x84bexa[_0xcbaf[13]]),{distinct:true}))[_0xcbaf[12]](function(_0x84bexb){_0x84bex8[_0xcbaf[9]](200)[_0xcbaf[8]](_0x84bexb)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})}};exports[_0xcbaf[24]]= function(_0x84bexa,_0x84bex8){return OpenchannelQueue[_0xcbaf[22]](_0xcbaf[21])[_0xcbaf[17]](_0x84bexa[_0xcbaf[26]][_0xcbaf[15]])[_0xcbaf[12]](function(_0x84bexc){if(!_0x84bexc){return _0x84bex8[_0xcbaf[25]](404)};return _0x84bex8[_0xcbaf[8]](_0x84bexc)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})};exports[_0xcbaf[27]]= function(_0x84bexa,_0x84bex8){return OpenchannelQueue[_0xcbaf[17]](_0x84bexa[_0xcbaf[26]][_0xcbaf[15]])[_0xcbaf[12]](function(_0x84bexe){if(!_0x84bexe){return _0x84bex8[_0xcbaf[25]](404)};return _0x84bexe[_0xcbaf[33]]({where:{role:_0xcbaf[29]},attributes:[_0xcbaf[15],_0xcbaf[30],_0xcbaf[31],_0xcbaf[32]]})})[_0xcbaf[12]](function(_0x84bexd){return _0x84bex8[_0xcbaf[9]](200)[_0xcbaf[8]]({rows:_0x84bexd,count:_0x84bexd[_0xcbaf[28]]})})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})};exports[_0xcbaf[34]]= function(_0x84bexa,_0x84bex8){var _0x84bexf;return OpenchannelQueue[_0xcbaf[34]](_0x84bexa[_0xcbaf[38]])[_0xcbaf[12]](function(_0x84bex10){_0x84bexf= _0x84bex10;if(_0x84bexa[_0xcbaf[38]][_0xcbaf[37]]){return _0x84bexf[_0xcbaf[40]](_0x84bexa[_0xcbaf[38]][_0xcbaf[37]],{penalty:_0x84bexa[_0xcbaf[38]][_0xcbaf[39]]|| 0,queue:_0x84bexf[_0xcbaf[30]]})}})[_0xcbaf[12]](function(){return _0x84bex8[_0xcbaf[9]](201)[_0xcbaf[8]](_0x84bexf)})[_0xcbaf[11]](sequelize.UniqueConstraintError,function(_0x84bex9){return Util[_0xcbaf[36]][_0xcbaf[35]](_0x84bex8,_0x84bex9)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})};exports[_0xcbaf[41]]= function(_0x84bexa,_0x84bex8){if(_0x84bexa[_0xcbaf[38]][_0xcbaf[15]]){delete _0x84bexa[_0xcbaf[38]][_0xcbaf[15]]};return OpenchannelQueue[_0xcbaf[17]](_0x84bexa[_0xcbaf[26]][_0xcbaf[15]])[_0xcbaf[12]](function(_0x84bexc){if(!_0x84bexc){return _0x84bex8[_0xcbaf[25]](404)};var _0x84bex11=_[_0xcbaf[19]](_0x84bexc,_0x84bexa[_0xcbaf[38]]);return _0x84bex11[_0xcbaf[42]]()})[_0xcbaf[12]](function(_0x84bexc){return _0x84bex8[_0xcbaf[9]](200)[_0xcbaf[8]](_0x84bexc)})[_0xcbaf[11]](sequelize.UniqueConstraintError,function(_0x84bex9){return Util[_0xcbaf[36]][_0xcbaf[35]](_0x84bex8,_0x84bex9)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})};exports[_0xcbaf[43]]= function(_0x84bexa,_0x84bex8,_0x84bex12){return OpenchannelQueue[_0xcbaf[17]](_0x84bexa[_0xcbaf[26]][_0xcbaf[15]])[_0xcbaf[12]](function(_0x84bexc){if(!_0x84bexc){return _0x84bex8[_0xcbaf[25]](404)};var _0x84bex13=_[_0xcbaf[44]](_0x84bexa[_0xcbaf[38]][_0xcbaf[37]],function(_0x84bex14){return {UserId:_0x84bex14,penalty:_0x84bexa[_0xcbaf[38]][_0xcbaf[39]],OpenchannelQueueId:_0x84bexc[_0xcbaf[15]],queue:_0x84bexc[_0xcbaf[30]]}});return UserHasOpenchannelQueue[_0xcbaf[45]](_0x84bex13,{individualHooks:true})})[_0xcbaf[12]](function(){return _0x84bex8[_0xcbaf[25]](200)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})};exports[_0xcbaf[46]]= function(_0x84bexa,_0x84bex8){return OpenchannelQueue[_0xcbaf[17]](_0x84bexa[_0xcbaf[26]][_0xcbaf[15]])[_0xcbaf[12]](function(_0x84bexc){if(_0x84bexc){return _0x84bexc[_0xcbaf[47]](_0x84bexa[_0xcbaf[13]][_0xcbaf[37]],{individualHooks:true})}else {throw  new Error(_0xcbaf[48])}})[_0xcbaf[12]](function(){return _0x84bex8[_0xcbaf[25]](202)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})};exports[_0xcbaf[49]]= function(_0x84bexa,_0x84bex8){var _0x84bex15;return OpenchannelQueue[_0xcbaf[17]](_0x84bexa[_0xcbaf[26]][_0xcbaf[15]])[_0xcbaf[12]](function(_0x84bexc){_0x84bex15= _0x84bexc;if(!_0x84bexc){return _0x84bex8[_0xcbaf[25]](404)};return _0x84bexc[_0xcbaf[49]]()})[_0xcbaf[12]](function(){return _0x84bex8[_0xcbaf[25]](204)})[_0xcbaf[11]](sequelize.ForeignKeyConstraintError,function(_0x84bex9){return Util[_0xcbaf[36]][_0xcbaf[53]](_0x84bex8,_0xcbaf[52],_0x84bex15[_0xcbaf[30]],_0x84bex9)})[_0xcbaf[11]](function(_0x84bex9){console[_0xcbaf[51]](_0xcbaf[50],_0x84bex9);return handleError(_0x84bex8,_0x84bex9)})};exports[_0xcbaf[54]]= function(_0x84bexa,_0x84bex8){return OpenchannelQueue[_0xcbaf[49]]({where:{id:_0x84bexa[_0xcbaf[13]][_0xcbaf[55]]},individualHooks:true})[_0xcbaf[12]](function(){return _0x84bex8[_0xcbaf[25]](204)})[_0xcbaf[11]](function(_0x84bex9){return handleError(_0x84bex8,_0x84bex9)})}
\ No newline at end of file