Built motion from commit (unavailable).|2.5.13
[motion2.git] / server / api / cmHopperFinal / cmHopperFinal.controller.js
index dfc0d0e..6875cf8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbcb2=['includeAll','find','describe','update','uniqueid','body','sequelize','COUNT','`state`\x20=\x200,\x201,\x20null','noSuchContacts','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','busyContacts','literal','abandonedContacts','`state`\x20=\x2022,\x201,\x20null','reCallContacts','`state`\x20=\x2019,\x201,\x20null','countContactsIvrCampaignHopperFinal','`state`\x20=\x203,\x201,\x20null','congestionContacts','`state`\x20=\x2010\x20,\x201,\x20null','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','answeringMachine','moveContactsQueueCampaignHopperFinal','VoiceQueue','insert','into','fromQuery','ContactId','ListId','VoiceQueueId','createdAt','select','field','ANY_VALUE(calleridnum)','phone','NOW()','scheduledAt','ANY_VALUE(ContactId)','updatedAt','cm_hopper_final','VoiceQueueId\x20=\x20?','toString','state\x20=\x20?','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','from','calleridnum','group','moveContactsIvrCampaignHopperFinal','cm_hopper','CampaignId','ANY_VALUE(ListId)','ANY_VALUE(CampaignId)','CampaignId\x20=\x20?','state','state\x20=\x204','checkContactHopper','findOne','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','status','end','offset','limit','set','Content-Range','json','apply','save','destroy','then','sendStatus','stack','name','send','index','map','rawAttributes','fieldName','type','query','keys','filters','attributes','intersection','model','fields','length','hasOwnProperty','order','sort','where','pick','VIRTUAL','filter','merge','options','CmHopperFinal','include','findAll','rows','catch','show','params'];(function(_0x28f7fa,_0x37131d){var _0xcca44e=function(_0x53db1c){while(--_0x53db1c){_0x28f7fa['push'](_0x28f7fa['shift']());}};_0xcca44e(++_0x37131d);}(_0xbcb2,0xbd));var _0x2bcb=function(_0x4eb7d7,_0x378639){_0x4eb7d7=_0x4eb7d7-0x0;var _0x6df382=_0xbcb2[_0x4eb7d7];return _0x6df382;};'use strict';var pdf=require(_0x2bcb('0x0'));var emlformat=require(_0x2bcb('0x1'));var rimraf=require(_0x2bcb('0x2'));var zipdir=require(_0x2bcb('0x3'));var jsonpatch=require(_0x2bcb('0x4'));var rp=require(_0x2bcb('0x5'));var moment=require(_0x2bcb('0x6'));var BPromise=require(_0x2bcb('0x7'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x2bcb('0x8'));var ejs=require(_0x2bcb('0x9'));var fs=require('fs');var _=require(_0x2bcb('0xa'));var squel=require('squel');var crypto=require(_0x2bcb('0xb'));var jsforce=require(_0x2bcb('0xc'));var deskjs=require(_0x2bcb('0xd'));var toCsv=require(_0x2bcb('0x8'));var querystring=require('querystring');var Papa=require(_0x2bcb('0xe'));var Redis=require('ioredis');var authService=require(_0x2bcb('0xf'));var qs=require(_0x2bcb('0x10'));var as=require(_0x2bcb('0x11'));var hardwareService=require(_0x2bcb('0x12'));var logger=require('../../config/logger')(_0x2bcb('0x13'));var utils=require(_0x2bcb('0x14'));var config=require(_0x2bcb('0x15'));var db=require(_0x2bcb('0x16'))['db'];function respondWithStatusCode(_0xda7f1f,_0x456788){_0x456788=_0x456788||0xcc;return function(_0x6c8613){if(_0x6c8613){return _0xda7f1f['sendStatus'](_0x456788);}return _0xda7f1f[_0x2bcb('0x17')](_0x456788)[_0x2bcb('0x18')]();};}function respondWithResult(_0x41f5b7,_0x49dcfa){_0x49dcfa=_0x49dcfa||0xc8;return function(_0x5b099e){if(_0x5b099e){return _0x41f5b7['status'](_0x49dcfa)['json'](_0x5b099e);}};}function respondWithFilteredResult(_0x237415,_0x112db6){return function(_0x5131e0){if(_0x5131e0){var _0x5b4cfb=_0x5131e0['count'],_0x4ab675=_0x112db6[_0x2bcb('0x19')],_0x2cdefc=_0x112db6[_0x2bcb('0x19')]+_0x112db6[_0x2bcb('0x1a')],_0x3f9d81;if(_0x2cdefc>=_0x5b4cfb){_0x2cdefc=_0x5b4cfb;_0x3f9d81=0xc8;}else{_0x3f9d81=0xce;}_0x237415[_0x2bcb('0x17')](_0x3f9d81);return _0x237415[_0x2bcb('0x1b')](_0x2bcb('0x1c'),_0x4ab675+'-'+_0x2cdefc+'/'+_0x5b4cfb)[_0x2bcb('0x1d')](_0x5131e0);}return null;};}function patchUpdates(_0x37ed74){return function(_0x34e84a){try{jsonpatch[_0x2bcb('0x1e')](_0x34e84a,_0x37ed74,!![]);}catch(_0x30f506){return BPromise['reject'](_0x30f506);}return _0x34e84a[_0x2bcb('0x1f')]();};}function saveUpdates(_0x123e7c,_0x1f023e){return function(_0xe1cdc6){if(_0xe1cdc6){return _0xe1cdc6['update'](_0x123e7c)['then'](function(_0x255c33){return _0x255c33;});}return null;};}function removeEntity(_0x9d5fcb,_0x4d685f){return function(_0x2a8291){if(_0x2a8291){return _0x2a8291[_0x2bcb('0x20')]()[_0x2bcb('0x21')](function(){_0x9d5fcb[_0x2bcb('0x17')](0xcc)[_0x2bcb('0x18')]();});}};}function handleEntityNotFound(_0x1dfd44,_0x3e11e9){return function(_0x1c0e35){if(!_0x1c0e35){_0x1dfd44[_0x2bcb('0x22')](0x194);}return _0x1c0e35;};}function handleError(_0x22d67a,_0x284ef2){_0x284ef2=_0x284ef2||0x1f4;return function(_0x5604a7){logger['error'](_0x5604a7[_0x2bcb('0x23')]);if(_0x5604a7[_0x2bcb('0x24')]){delete _0x5604a7[_0x2bcb('0x24')];}_0x22d67a[_0x2bcb('0x17')](_0x284ef2)[_0x2bcb('0x25')](_0x5604a7);};}exports[_0x2bcb('0x26')]=function(_0x47611b,_0x372235){var _0x46926a={},_0x5345ec={},_0x58974c={'count':0x0,'rows':[]};var _0x568792=_[_0x2bcb('0x27')](db['CmHopperFinal'][_0x2bcb('0x28')],function(_0x32ca80){return{'name':_0x32ca80[_0x2bcb('0x29')],'type':_0x32ca80[_0x2bcb('0x2a')]['key']};});_0x5345ec['model']=_[_0x2bcb('0x27')](_0x568792,_0x2bcb('0x24'));_0x5345ec[_0x2bcb('0x2b')]=_[_0x2bcb('0x2c')](_0x47611b['query']);_0x5345ec[_0x2bcb('0x2d')]=_['intersection'](_0x5345ec['model'],_0x5345ec[_0x2bcb('0x2b')]);_0x46926a[_0x2bcb('0x2e')]=_[_0x2bcb('0x2f')](_0x5345ec[_0x2bcb('0x30')],qs[_0x2bcb('0x31')](_0x47611b['query']['fields']));_0x46926a['attributes']=_0x46926a[_0x2bcb('0x2e')][_0x2bcb('0x32')]?_0x46926a[_0x2bcb('0x2e')]:_0x5345ec['model'];if(!_0x47611b[_0x2bcb('0x2b')][_0x2bcb('0x33')]('nolimit')){_0x46926a[_0x2bcb('0x1a')]=qs[_0x2bcb('0x1a')](_0x47611b[_0x2bcb('0x2b')][_0x2bcb('0x1a')]);_0x46926a['offset']=qs[_0x2bcb('0x19')](_0x47611b[_0x2bcb('0x2b')][_0x2bcb('0x19')]);}_0x46926a[_0x2bcb('0x34')]=qs[_0x2bcb('0x35')](_0x47611b[_0x2bcb('0x2b')]['sort']);_0x46926a[_0x2bcb('0x36')]=qs['filters'](_[_0x2bcb('0x37')](_0x47611b[_0x2bcb('0x2b')],_0x5345ec[_0x2bcb('0x2d')]));if(_0x47611b[_0x2bcb('0x2b')]['filter']){_0x46926a['where']=_['merge'](_0x46926a[_0x2bcb('0x36')],{'$or':_[_0x2bcb('0x27')](_0x568792,function(_0x4e90e6){if(_0x4e90e6[_0x2bcb('0x2a')]!==_0x2bcb('0x38')){var _0x4c2798={};_0x4c2798[_0x4e90e6[_0x2bcb('0x24')]]={'$like':'%'+_0x47611b['query'][_0x2bcb('0x39')]+'%'};return _0x4c2798;}})});}_0x46926a=_[_0x2bcb('0x3a')]({},_0x46926a,_0x47611b[_0x2bcb('0x3b')]);var _0x482dce={'where':_0x46926a[_0x2bcb('0x36')]};return db[_0x2bcb('0x3c')]['count'](_0x482dce)[_0x2bcb('0x21')](function(_0x40d892){_0x58974c['count']=_0x40d892;if(_0x47611b['query']['includeAll']){_0x46926a[_0x2bcb('0x3d')]=[{'all':!![]}];}return db[_0x2bcb('0x3c')][_0x2bcb('0x3e')](_0x46926a);})[_0x2bcb('0x21')](function(_0x88dff4){_0x58974c[_0x2bcb('0x3f')]=_0x88dff4;return _0x58974c;})[_0x2bcb('0x21')](respondWithFilteredResult(_0x372235,_0x46926a))[_0x2bcb('0x40')](handleError(_0x372235,null));};exports[_0x2bcb('0x41')]=function(_0xf85bcc,_0x4db6fd){var _0x2bc9b1={'raw':!![],'where':{'id':_0xf85bcc[_0x2bcb('0x42')]['id']}},_0x54d564={};_0x54d564['model']=_[_0x2bcb('0x2c')](db[_0x2bcb('0x3c')]['rawAttributes']);_0x54d564['query']=_[_0x2bcb('0x2c')](_0xf85bcc['query']);_0x54d564[_0x2bcb('0x2d')]=_['intersection'](_0x54d564['model'],_0x54d564[_0x2bcb('0x2b')]);_0x2bc9b1[_0x2bcb('0x2e')]=_['intersection'](_0x54d564['model'],qs[_0x2bcb('0x31')](_0xf85bcc[_0x2bcb('0x2b')][_0x2bcb('0x31')]));_0x2bc9b1[_0x2bcb('0x2e')]=_0x2bc9b1[_0x2bcb('0x2e')][_0x2bcb('0x32')]?_0x2bc9b1[_0x2bcb('0x2e')]:_0x54d564[_0x2bcb('0x30')];if(_0xf85bcc['query'][_0x2bcb('0x43')]){_0x2bc9b1[_0x2bcb('0x3d')]=[{'all':!![]}];}_0x2bc9b1=_['merge']({},_0x2bc9b1,_0xf85bcc[_0x2bcb('0x3b')]);return db[_0x2bcb('0x3c')][_0x2bcb('0x44')](_0x2bc9b1)[_0x2bcb('0x21')](handleEntityNotFound(_0x4db6fd,null))[_0x2bcb('0x21')](respondWithResult(_0x4db6fd,null))[_0x2bcb('0x40')](handleError(_0x4db6fd,null));};exports[_0x2bcb('0x45')]=function(_0x2a9f44,_0x5c3803){return db[_0x2bcb('0x3c')][_0x2bcb('0x45')]()['then'](respondWithResult(_0x5c3803,null))[_0x2bcb('0x40')](handleError(_0x5c3803,null));};exports[_0x2bcb('0x46')]=function(_0x57c4ad,_0x59d5fd){if(_0x57c4ad['body'][_0x2bcb('0x47')]){delete _0x57c4ad[_0x2bcb('0x48')][_0x2bcb('0x47')];}return db[_0x2bcb('0x3c')]['find']({'where':{'uniqueid':_0x57c4ad[_0x2bcb('0x42')]['id']}})['then'](handleEntityNotFound(_0x59d5fd,null))[_0x2bcb('0x21')](saveUpdates(_0x57c4ad[_0x2bcb('0x48')],null))[_0x2bcb('0x21')](respondWithResult(_0x59d5fd,null))[_0x2bcb('0x40')](handleError(_0x59d5fd,null));};exports['countContactsQueueCampaignHopperFinal']=function(_0x2acce4,_0x1d88e5,_0x592561){return db[_0x2bcb('0x3c')][_0x2bcb('0x3e')]({'raw':![],'where':{'VoiceQueueId':_0x2acce4['params']['id']},'attributes':[[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db[_0x2bcb('0x49')]['literal'](_0x2bcb('0x4b')))),_0x2bcb('0x4c')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db['sequelize']['fn']('IF',db['sequelize']['literal']('`state`\x20=\x203,\x201,\x20null'))),_0x2bcb('0x4d')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db['sequelize']['literal'](_0x2bcb('0x4e')))),_0x2bcb('0x4f')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db['sequelize'][_0x2bcb('0x50')]('`state`\x20=\x208,\x201,\x20null'))),'congestionContacts'],[db['sequelize']['fn']('COUNT',db[_0x2bcb('0x49')]['fn']('IF',db[_0x2bcb('0x49')][_0x2bcb('0x50')]('`state`\x20=\x2010\x20,\x201,\x20null'))),'dropContacts'],[db['sequelize']['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db['sequelize'][_0x2bcb('0x50')]('`state`\x20=\x2011\x20,\x201,\x20null'))),_0x2bcb('0x51')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db['sequelize']['fn']('IF',db[_0x2bcb('0x49')]['literal'](_0x2bcb('0x52')))),_0x2bcb('0x53')],[db['sequelize']['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db[_0x2bcb('0x49')][_0x2bcb('0x50')](_0x2bcb('0x54')))),'answeringMachine']]})[_0x2bcb('0x21')](handleEntityNotFound(_0x1d88e5,null))[_0x2bcb('0x21')](respondWithResult(_0x1d88e5,null))[_0x2bcb('0x40')](handleError(_0x1d88e5,null));};exports[_0x2bcb('0x55')]=function(_0x55478c,_0x180e81,_0x28c859){return db[_0x2bcb('0x3c')][_0x2bcb('0x3e')]({'raw':![],'where':{'CampaignId':_0x55478c[_0x2bcb('0x42')]['id']},'attributes':[[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db[_0x2bcb('0x49')][_0x2bcb('0x50')](_0x2bcb('0x4b')))),_0x2bcb('0x4c')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db['sequelize'][_0x2bcb('0x50')](_0x2bcb('0x56')))),_0x2bcb('0x4d')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db[_0x2bcb('0x49')][_0x2bcb('0x50')](_0x2bcb('0x4e')))),'busyContacts'],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db[_0x2bcb('0x49')][_0x2bcb('0x50')]('`state`\x20=\x208,\x201,\x20null'))),_0x2bcb('0x57')],[db['sequelize']['fn'](_0x2bcb('0x4a'),db['sequelize']['fn']('IF',db['sequelize'][_0x2bcb('0x50')](_0x2bcb('0x58')))),_0x2bcb('0x59')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db['sequelize'][_0x2bcb('0x50')](_0x2bcb('0x5a')))),_0x2bcb('0x51')],[db[_0x2bcb('0x49')]['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db[_0x2bcb('0x49')][_0x2bcb('0x50')]('`state`\x20=\x2022,\x201,\x20null'))),_0x2bcb('0x53')],[db['sequelize']['fn'](_0x2bcb('0x4a'),db[_0x2bcb('0x49')]['fn']('IF',db['sequelize'][_0x2bcb('0x50')](_0x2bcb('0x54')))),_0x2bcb('0x5b')]]})[_0x2bcb('0x21')](handleEntityNotFound(_0x180e81,null))['then'](respondWithResult(_0x180e81,null))[_0x2bcb('0x40')](handleError(_0x180e81,null));};exports[_0x2bcb('0x5c')]=function(_0x31a8a1,_0xfff51b,_0x118d5a){return db[_0x2bcb('0x5d')][_0x2bcb('0x44')]({'where':{'id':_0x31a8a1[_0x2bcb('0x42')]['id']}})[_0x2bcb('0x21')](handleEntityNotFound(_0xfff51b,null))['then'](function(_0x1b3ac5){var _0x24c3e7;if(_0x1b3ac5){_0x24c3e7=squel[_0x2bcb('0x5e')]()[_0x2bcb('0x5f')]('cm_hopper')[_0x2bcb('0x60')](['phone','scheduledAt',_0x2bcb('0x61'),_0x2bcb('0x62'),_0x2bcb('0x63'),_0x2bcb('0x64'),'updatedAt'],squel[_0x2bcb('0x65')]()[_0x2bcb('0x66')](_0x2bcb('0x67'),_0x2bcb('0x68'))[_0x2bcb('0x66')](_0x2bcb('0x69'),_0x2bcb('0x6a'))[_0x2bcb('0x66')](_0x2bcb('0x6b'),'ContactId')['field']('ANY_VALUE(ListId)',_0x2bcb('0x62'))['field']('ANY_VALUE(VoiceQueueId)',_0x2bcb('0x63'))[_0x2bcb('0x66')](_0x2bcb('0x69'),_0x2bcb('0x64'))[_0x2bcb('0x66')](_0x2bcb('0x69'),_0x2bcb('0x6c'))['from'](_0x2bcb('0x6d'))[_0x2bcb('0x36')](_0x2bcb('0x6e'),_0x31a8a1[_0x2bcb('0x42')]['id'][_0x2bcb('0x6f')]())['where'](_0x2bcb('0x70'),_0x31a8a1['body']['state'][_0x2bcb('0x6f')]())['where'](_0x2bcb('0x71'))[_0x2bcb('0x36')](_0x2bcb('0x72'),squel[_0x2bcb('0x65')]()[_0x2bcb('0x66')](_0x2bcb('0x68'))[_0x2bcb('0x73')]('cm_hopper')[_0x2bcb('0x36')]('VoiceQueueId\x20=\x20?',_0x31a8a1[_0x2bcb('0x42')]['id'][_0x2bcb('0x6f')]()))[_0x2bcb('0x36')](_0x2bcb('0x72'),squel[_0x2bcb('0x65')]()[_0x2bcb('0x66')](_0x2bcb('0x74'))[_0x2bcb('0x73')](_0x2bcb('0x6d'))['where'](_0x2bcb('0x6e'),_0x31a8a1[_0x2bcb('0x42')]['id'][_0x2bcb('0x6f')]())[_0x2bcb('0x36')]('state\x20=\x204'))[_0x2bcb('0x75')](_0x2bcb('0x61')))['toString']();return db['sequelize'][_0x2bcb('0x2b')](_0x24c3e7);}return[];})[_0x2bcb('0x21')](respondWithResult(_0xfff51b,null))[_0x2bcb('0x40')](handleError(_0xfff51b,null));};exports[_0x2bcb('0x76')]=function(_0x111dbe,_0x1a58e6,_0x1db966){return db['Campaign'][_0x2bcb('0x44')]({'where':{'id':_0x111dbe['params']['id']}})[_0x2bcb('0x21')](handleEntityNotFound(_0x1a58e6,null))[_0x2bcb('0x21')](function(_0x20dfad){var _0x535860;if(_0x20dfad){_0x535860=squel[_0x2bcb('0x5e')]()['into'](_0x2bcb('0x77'))[_0x2bcb('0x60')]([_0x2bcb('0x68'),_0x2bcb('0x6a'),_0x2bcb('0x61'),_0x2bcb('0x62'),_0x2bcb('0x78'),_0x2bcb('0x64'),'updatedAt'],squel[_0x2bcb('0x65')]()['field']('ANY_VALUE(calleridnum)',_0x2bcb('0x68'))['field'](_0x2bcb('0x69'),_0x2bcb('0x6a'))[_0x2bcb('0x66')](_0x2bcb('0x6b'),_0x2bcb('0x61'))[_0x2bcb('0x66')](_0x2bcb('0x79'),'ListId')['field'](_0x2bcb('0x7a'),_0x2bcb('0x78'))[_0x2bcb('0x66')](_0x2bcb('0x69'),'createdAt')[_0x2bcb('0x66')]('NOW()',_0x2bcb('0x6c'))[_0x2bcb('0x73')](_0x2bcb('0x6d'))[_0x2bcb('0x36')](_0x2bcb('0x7b'),_0x111dbe['params']['id'][_0x2bcb('0x6f')]())[_0x2bcb('0x36')](_0x2bcb('0x70'),_0x111dbe[_0x2bcb('0x48')][_0x2bcb('0x7c')][_0x2bcb('0x6f')]())[_0x2bcb('0x36')]('calleridnum\x20IS\x20NOT\x20NULL')['where'](_0x2bcb('0x72'),squel[_0x2bcb('0x65')]()[_0x2bcb('0x66')](_0x2bcb('0x68'))[_0x2bcb('0x73')]('cm_hopper')[_0x2bcb('0x36')]('CampaignId\x20=\x20?',_0x111dbe['params']['id'][_0x2bcb('0x6f')]()))[_0x2bcb('0x36')](_0x2bcb('0x72'),squel[_0x2bcb('0x65')]()[_0x2bcb('0x66')]('calleridnum')['from'](_0x2bcb('0x6d'))[_0x2bcb('0x36')]('CampaignId\x20=\x20?',_0x111dbe[_0x2bcb('0x42')]['id'][_0x2bcb('0x6f')]())[_0x2bcb('0x36')](_0x2bcb('0x7d')))[_0x2bcb('0x75')]('ContactId'))[_0x2bcb('0x6f')]();return db[_0x2bcb('0x49')]['query'](_0x535860);}return[];})['then'](respondWithResult(_0x1a58e6,null))[_0x2bcb('0x40')](handleError(_0x1a58e6,null));};exports[_0x2bcb('0x7e')]=function(_0x17371d,_0x17fe3b,_0x4016a2){return db['CmHopper'][_0x2bcb('0x7f')]({'where':{'VoiceQueueId':_0x17371d[_0x2bcb('0x48')][_0x2bcb('0x63')],'CampaignId':_0x17371d[_0x2bcb('0x48')][_0x2bcb('0x78')],'ContactId':_0x17371d['body'][_0x2bcb('0x61')]}})[_0x2bcb('0x21')](handleEntityNotFound(_0x17fe3b,null))[_0x2bcb('0x21')](function(_0x1f5672){if(_0x1f5672){return _0x1f5672;}return null;})['then'](respondWithResult(_0x17fe3b,null))[_0x2bcb('0x40')](handleError(_0x17fe3b,null));};
\ No newline at end of file
+var _0xd58c=['uniqueid','countContactsQueueCampaignHopperFinal','sequelize','literal','`state`\x20=\x200,\x201,\x20null','COUNT','`state`\x20=\x203,\x201,\x20null','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','busyContacts','`state`\x20=\x208,\x201,\x20null','congestionContacts','`state`\x20=\x2010\x20,\x201,\x20null','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','abandonedContacts','`state`\x20=\x2022,\x201,\x20null','`state`\x20=\x2019,\x201,\x20null','answeringMachine','countContactsIvrCampaignHopperFinal','findAll','noSuchContacts','moveContactsQueueCampaignHopperFinal','VoiceQueue','insert','cm_hopper','phone','scheduledAt','ContactId','ListId','VoiceQueueId','updatedAt','select','ANY_VALUE(calleridnum)','field','NOW()','ANY_VALUE(ContactId)','ANY_VALUE(VoiceQueueId)','createdAt','from','cm_hopper_final','toString','state\x20=\x20?','state','calleridnum\x20IS\x20NOT\x20NULL','VoiceQueueId\x20=\x20?','moveContactsIvrCampaignHopperFinal','Campaign','fromQuery','CampaignId','ANY_VALUE(ListId)','ANY_VALUE(CampaignId)','CampaignId\x20=\x20?','calleridnum\x20NOT\x20IN\x20(?)','group','checkContactHopper','html-pdf','eml-format','rimraf','fast-json-patch','moment','mustache','util','path','sox','to-csv','squel','crypto','jsforce','desk.js','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','count','limit','set','Content-Range','json','apply','then','destroy','stack','name','index','map','rawAttributes','fieldName','key','query','keys','filters','model','attributes','intersection','fields','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','merge','type','VIRTUAL','options','CmHopperFinal','include','catch','show','params','length','includeAll','find','describe','update','body'];(function(_0x3eed5d,_0x300936){var _0x537e81=function(_0x359a4d){while(--_0x359a4d){_0x3eed5d['push'](_0x3eed5d['shift']());}};_0x537e81(++_0x300936);}(_0xd58c,0xb6));var _0xcd58=function(_0x2c7749,_0x59e766){_0x2c7749=_0x2c7749-0x0;var _0x53c794=_0xd58c[_0x2c7749];return _0x53c794;};'use strict';var pdf=require(_0xcd58('0x0'));var emlformat=require(_0xcd58('0x1'));var rimraf=require(_0xcd58('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xcd58('0x3'));var rp=require('request-promise');var moment=require(_0xcd58('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xcd58('0x5'));var util=require(_0xcd58('0x6'));var path=require(_0xcd58('0x7'));var sox=require(_0xcd58('0x8'));var csv=require(_0xcd58('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xcd58('0xa'));var crypto=require(_0xcd58('0xb'));var jsforce=require(_0xcd58('0xc'));var deskjs=require(_0xcd58('0xd'));var toCsv=require(_0xcd58('0x9'));var querystring=require('querystring');var Papa=require(_0xcd58('0xe'));var Redis=require(_0xcd58('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xcd58('0x10'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0xcd58('0x11'));var logger=require(_0xcd58('0x12'))(_0xcd58('0x13'));var utils=require('../../config/utils');var config=require(_0xcd58('0x14'));var licenseUtil=require('../../config/license/util');var db=require(_0xcd58('0x15'))['db'];function respondWithStatusCode(_0x51880c,_0x477d19){_0x477d19=_0x477d19||0xcc;return function(_0x42b221){if(_0x42b221){return _0x51880c[_0xcd58('0x16')](_0x477d19);}return _0x51880c[_0xcd58('0x17')](_0x477d19)[_0xcd58('0x18')]();};}function respondWithResult(_0x202412,_0xda9091){_0xda9091=_0xda9091||0xc8;return function(_0x3376f3){if(_0x3376f3){return _0x202412['status'](_0xda9091)['json'](_0x3376f3);}};}function respondWithFilteredResult(_0x3ce190,_0xa225e3){return function(_0x3d5e86){if(_0x3d5e86){var _0x51f5b6=_0x3d5e86[_0xcd58('0x19')],_0x515fc3=_0xa225e3['offset'],_0xea2532=_0xa225e3['offset']+_0xa225e3[_0xcd58('0x1a')],_0xeaee1f;if(_0xea2532>=_0x51f5b6){_0xea2532=_0x51f5b6;_0xeaee1f=0xc8;}else{_0xeaee1f=0xce;}_0x3ce190['status'](_0xeaee1f);return _0x3ce190[_0xcd58('0x1b')](_0xcd58('0x1c'),_0x515fc3+'-'+_0xea2532+'/'+_0x51f5b6)[_0xcd58('0x1d')](_0x3d5e86);}return null;};}function patchUpdates(_0x149641){return function(_0x491198){try{jsonpatch[_0xcd58('0x1e')](_0x491198,_0x149641,!![]);}catch(_0x49881d){return BPromise['reject'](_0x49881d);}return _0x491198['save']();};}function saveUpdates(_0x503c5,_0x1e6ce7){return function(_0x44b002){if(_0x44b002){return _0x44b002['update'](_0x503c5)[_0xcd58('0x1f')](function(_0x2a8681){return _0x2a8681;});}return null;};}function removeEntity(_0x5c241c,_0x18f953){return function(_0x1765d3){if(_0x1765d3){return _0x1765d3[_0xcd58('0x20')]()['then'](function(){_0x5c241c['status'](0xcc)[_0xcd58('0x18')]();});}};}function handleEntityNotFound(_0x3eae55,_0x135b0a){return function(_0x33feb3){if(!_0x33feb3){_0x3eae55[_0xcd58('0x16')](0x194);}return _0x33feb3;};}function handleError(_0x38a559,_0x2ea852){_0x2ea852=_0x2ea852||0x1f4;return function(_0x50f8a7){logger['error'](_0x50f8a7[_0xcd58('0x21')]);if(_0x50f8a7[_0xcd58('0x22')]){delete _0x50f8a7['name'];}_0x38a559[_0xcd58('0x17')](_0x2ea852)['send'](_0x50f8a7);};}exports[_0xcd58('0x23')]=function(_0x2ec6b1,_0x75bb8e){var _0x1784ff={},_0x2b64b8={},_0x30cf55={'count':0x0,'rows':[]};var _0x52b205=_[_0xcd58('0x24')](db['CmHopperFinal'][_0xcd58('0x25')],function(_0x5e1b62){return{'name':_0x5e1b62[_0xcd58('0x26')],'type':_0x5e1b62['type'][_0xcd58('0x27')]};});_0x2b64b8['model']=_[_0xcd58('0x24')](_0x52b205,_0xcd58('0x22'));_0x2b64b8[_0xcd58('0x28')]=_[_0xcd58('0x29')](_0x2ec6b1['query']);_0x2b64b8[_0xcd58('0x2a')]=_['intersection'](_0x2b64b8[_0xcd58('0x2b')],_0x2b64b8[_0xcd58('0x28')]);_0x1784ff[_0xcd58('0x2c')]=_[_0xcd58('0x2d')](_0x2b64b8[_0xcd58('0x2b')],qs[_0xcd58('0x2e')](_0x2ec6b1['query']['fields']));_0x1784ff[_0xcd58('0x2c')]=_0x1784ff['attributes']['length']?_0x1784ff[_0xcd58('0x2c')]:_0x2b64b8[_0xcd58('0x2b')];if(!_0x2ec6b1[_0xcd58('0x28')][_0xcd58('0x2f')](_0xcd58('0x30'))){_0x1784ff[_0xcd58('0x1a')]=qs['limit'](_0x2ec6b1['query'][_0xcd58('0x1a')]);_0x1784ff[_0xcd58('0x31')]=qs[_0xcd58('0x31')](_0x2ec6b1['query'][_0xcd58('0x31')]);}_0x1784ff[_0xcd58('0x32')]=qs[_0xcd58('0x33')](_0x2ec6b1['query']['sort']);_0x1784ff[_0xcd58('0x34')]=qs[_0xcd58('0x2a')](_[_0xcd58('0x35')](_0x2ec6b1[_0xcd58('0x28')],_0x2b64b8[_0xcd58('0x2a')]),_0x52b205);if(_0x2ec6b1[_0xcd58('0x28')][_0xcd58('0x36')]){_0x1784ff[_0xcd58('0x34')]=_[_0xcd58('0x37')](_0x1784ff[_0xcd58('0x34')],{'$or':_[_0xcd58('0x24')](_0x52b205,function(_0x37e840){if(_0x37e840[_0xcd58('0x38')]!==_0xcd58('0x39')){var _0xc50333={};_0xc50333[_0x37e840[_0xcd58('0x22')]]={'$like':'%'+_0x2ec6b1[_0xcd58('0x28')][_0xcd58('0x36')]+'%'};return _0xc50333;}})});}_0x1784ff=_[_0xcd58('0x37')]({},_0x1784ff,_0x2ec6b1[_0xcd58('0x3a')]);var _0x32e7eb={'where':_0x1784ff['where']};return db[_0xcd58('0x3b')][_0xcd58('0x19')](_0x32e7eb)[_0xcd58('0x1f')](function(_0x5d774d){_0x30cf55[_0xcd58('0x19')]=_0x5d774d;if(_0x2ec6b1[_0xcd58('0x28')]['includeAll']){_0x1784ff[_0xcd58('0x3c')]=[{'all':!![]}];}return db['CmHopperFinal']['findAll'](_0x1784ff);})[_0xcd58('0x1f')](function(_0x4ca4b6){_0x30cf55['rows']=_0x4ca4b6;return _0x30cf55;})[_0xcd58('0x1f')](respondWithFilteredResult(_0x75bb8e,_0x1784ff))[_0xcd58('0x3d')](handleError(_0x75bb8e,null));};exports[_0xcd58('0x3e')]=function(_0x52e7b1,_0x50520b){var _0x257cee={'raw':!![],'where':{'id':_0x52e7b1[_0xcd58('0x3f')]['id']}},_0x55fdf9={};_0x55fdf9[_0xcd58('0x2b')]=_['keys'](db['CmHopperFinal'][_0xcd58('0x25')]);_0x55fdf9[_0xcd58('0x28')]=_[_0xcd58('0x29')](_0x52e7b1[_0xcd58('0x28')]);_0x55fdf9[_0xcd58('0x2a')]=_[_0xcd58('0x2d')](_0x55fdf9[_0xcd58('0x2b')],_0x55fdf9[_0xcd58('0x28')]);_0x257cee[_0xcd58('0x2c')]=_[_0xcd58('0x2d')](_0x55fdf9[_0xcd58('0x2b')],qs[_0xcd58('0x2e')](_0x52e7b1[_0xcd58('0x28')]['fields']));_0x257cee[_0xcd58('0x2c')]=_0x257cee[_0xcd58('0x2c')][_0xcd58('0x40')]?_0x257cee['attributes']:_0x55fdf9[_0xcd58('0x2b')];if(_0x52e7b1[_0xcd58('0x28')][_0xcd58('0x41')]){_0x257cee[_0xcd58('0x3c')]=[{'all':!![]}];}_0x257cee=_['merge']({},_0x257cee,_0x52e7b1[_0xcd58('0x3a')]);return db[_0xcd58('0x3b')][_0xcd58('0x42')](_0x257cee)[_0xcd58('0x1f')](handleEntityNotFound(_0x50520b,null))[_0xcd58('0x1f')](respondWithResult(_0x50520b,null))[_0xcd58('0x3d')](handleError(_0x50520b,null));};exports[_0xcd58('0x43')]=function(_0x18e993,_0x452e7e){return db[_0xcd58('0x3b')]['describe']()[_0xcd58('0x1f')](respondWithResult(_0x452e7e,null))[_0xcd58('0x3d')](handleError(_0x452e7e,null));};exports[_0xcd58('0x44')]=function(_0x1ead66,_0x2bd4c9){if(_0x1ead66[_0xcd58('0x45')][_0xcd58('0x46')]){delete _0x1ead66[_0xcd58('0x45')][_0xcd58('0x46')];}return db[_0xcd58('0x3b')][_0xcd58('0x42')]({'where':{'uniqueid':_0x1ead66[_0xcd58('0x3f')]['id']}})['then'](handleEntityNotFound(_0x2bd4c9,null))[_0xcd58('0x1f')](saveUpdates(_0x1ead66[_0xcd58('0x45')],null))['then'](respondWithResult(_0x2bd4c9,null))[_0xcd58('0x3d')](handleError(_0x2bd4c9,null));};exports[_0xcd58('0x47')]=function(_0x40665f,_0x160c39,_0x424cfb){return db[_0xcd58('0x3b')]['findAll']({'raw':![],'where':{'VoiceQueueId':_0x40665f['params']['id']},'attributes':[[db[_0xcd58('0x48')]['fn']('COUNT',db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x4a')))),'noSuchContacts'],[db['sequelize']['fn'](_0xcd58('0x4b'),db['sequelize']['fn']('IF',db['sequelize'][_0xcd58('0x49')](_0xcd58('0x4c')))),_0xcd58('0x4d')],[db[_0xcd58('0x48')]['fn']('COUNT',db[_0xcd58('0x48')]['fn']('IF',db['sequelize']['literal'](_0xcd58('0x4e')))),_0xcd58('0x4f')],[db['sequelize']['fn'](_0xcd58('0x4b'),db['sequelize']['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x50')))),_0xcd58('0x51')],[db[_0xcd58('0x48')]['fn'](_0xcd58('0x4b'),db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x52')))),_0xcd58('0x53')],[db[_0xcd58('0x48')]['fn']('COUNT',db[_0xcd58('0x48')]['fn']('IF',db['sequelize'][_0xcd58('0x49')](_0xcd58('0x54')))),_0xcd58('0x55')],[db[_0xcd58('0x48')]['fn']('COUNT',db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x56')))),'reCallContacts'],[db['sequelize']['fn'](_0xcd58('0x4b'),db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x57')))),_0xcd58('0x58')]]})[_0xcd58('0x1f')](handleEntityNotFound(_0x160c39,null))['then'](respondWithResult(_0x160c39,null))[_0xcd58('0x3d')](handleError(_0x160c39,null));};exports[_0xcd58('0x59')]=function(_0x98d9b,_0x6bc87e,_0x3a4699){return db[_0xcd58('0x3b')][_0xcd58('0x5a')]({'raw':![],'where':{'CampaignId':_0x98d9b[_0xcd58('0x3f')]['id']},'attributes':[[db[_0xcd58('0x48')]['fn'](_0xcd58('0x4b'),db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x4a')))),_0xcd58('0x5b')],[db[_0xcd58('0x48')]['fn'](_0xcd58('0x4b'),db['sequelize']['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x4c')))),_0xcd58('0x4d')],[db['sequelize']['fn'](_0xcd58('0x4b'),db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x4e')))),'busyContacts'],[db[_0xcd58('0x48')]['fn'](_0xcd58('0x4b'),db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x50')))),_0xcd58('0x51')],[db[_0xcd58('0x48')]['fn'](_0xcd58('0x4b'),db[_0xcd58('0x48')]['fn']('IF',db['sequelize']['literal'](_0xcd58('0x52')))),_0xcd58('0x53')],[db[_0xcd58('0x48')]['fn']('COUNT',db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')]['literal'](_0xcd58('0x54')))),_0xcd58('0x55')],[db[_0xcd58('0x48')]['fn'](_0xcd58('0x4b'),db[_0xcd58('0x48')]['fn']('IF',db[_0xcd58('0x48')][_0xcd58('0x49')](_0xcd58('0x56')))),'reCallContacts'],[db['sequelize']['fn'](_0xcd58('0x4b'),db['sequelize']['fn']('IF',db[_0xcd58('0x48')]['literal'](_0xcd58('0x57')))),_0xcd58('0x58')]]})[_0xcd58('0x1f')](handleEntityNotFound(_0x6bc87e,null))[_0xcd58('0x1f')](respondWithResult(_0x6bc87e,null))['catch'](handleError(_0x6bc87e,null));};exports[_0xcd58('0x5c')]=function(_0x22199f,_0x4e03b6,_0xa89f04){return db[_0xcd58('0x5d')][_0xcd58('0x42')]({'where':{'id':_0x22199f[_0xcd58('0x3f')]['id']}})['then'](handleEntityNotFound(_0x4e03b6,null))[_0xcd58('0x1f')](function(_0x62b41b){var _0xe10126;if(_0x62b41b){_0xe10126=squel[_0xcd58('0x5e')]()['into'](_0xcd58('0x5f'))['fromQuery']([_0xcd58('0x60'),_0xcd58('0x61'),_0xcd58('0x62'),_0xcd58('0x63'),_0xcd58('0x64'),'createdAt',_0xcd58('0x65')],squel[_0xcd58('0x66')]()['field'](_0xcd58('0x67'),'phone')[_0xcd58('0x68')](_0xcd58('0x69'),_0xcd58('0x61'))[_0xcd58('0x68')](_0xcd58('0x6a'),_0xcd58('0x62'))[_0xcd58('0x68')]('ANY_VALUE(ListId)',_0xcd58('0x63'))[_0xcd58('0x68')](_0xcd58('0x6b'),_0xcd58('0x64'))[_0xcd58('0x68')](_0xcd58('0x69'),_0xcd58('0x6c'))[_0xcd58('0x68')](_0xcd58('0x69'),_0xcd58('0x65'))[_0xcd58('0x6d')](_0xcd58('0x6e'))['where']('VoiceQueueId\x20=\x20?',_0x22199f[_0xcd58('0x3f')]['id'][_0xcd58('0x6f')]())[_0xcd58('0x34')](_0xcd58('0x70'),_0x22199f[_0xcd58('0x45')][_0xcd58('0x71')][_0xcd58('0x6f')]())['where'](_0xcd58('0x72'))[_0xcd58('0x34')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0xcd58('0x66')]()[_0xcd58('0x68')](_0xcd58('0x60'))[_0xcd58('0x6d')](_0xcd58('0x5f'))[_0xcd58('0x34')](_0xcd58('0x73'),_0x22199f[_0xcd58('0x3f')]['id'][_0xcd58('0x6f')]()))['where']('calleridnum\x20NOT\x20IN\x20(?)',squel[_0xcd58('0x66')]()['field']('calleridnum')[_0xcd58('0x6d')]('cm_hopper_final')[_0xcd58('0x34')](_0xcd58('0x73'),_0x22199f[_0xcd58('0x3f')]['id'][_0xcd58('0x6f')]())[_0xcd58('0x34')]('state\x20=\x204'))['group']('ContactId'))[_0xcd58('0x6f')]();return db[_0xcd58('0x48')]['query'](_0xe10126);}return[];})[_0xcd58('0x1f')](respondWithResult(_0x4e03b6,null))[_0xcd58('0x3d')](handleError(_0x4e03b6,null));};exports[_0xcd58('0x74')]=function(_0x5328e4,_0x5d812c,_0x17cad1){return db[_0xcd58('0x75')][_0xcd58('0x42')]({'where':{'id':_0x5328e4[_0xcd58('0x3f')]['id']}})['then'](handleEntityNotFound(_0x5d812c,null))[_0xcd58('0x1f')](function(_0x372c0a){var _0xfa8373;if(_0x372c0a){_0xfa8373=squel[_0xcd58('0x5e')]()['into']('cm_hopper')[_0xcd58('0x76')]([_0xcd58('0x60'),_0xcd58('0x61'),'ContactId',_0xcd58('0x63'),_0xcd58('0x77'),_0xcd58('0x6c'),_0xcd58('0x65')],squel[_0xcd58('0x66')]()[_0xcd58('0x68')](_0xcd58('0x67'),_0xcd58('0x60'))[_0xcd58('0x68')](_0xcd58('0x69'),'scheduledAt')[_0xcd58('0x68')](_0xcd58('0x6a'),_0xcd58('0x62'))[_0xcd58('0x68')](_0xcd58('0x78'),_0xcd58('0x63'))['field'](_0xcd58('0x79'),_0xcd58('0x77'))[_0xcd58('0x68')](_0xcd58('0x69'),_0xcd58('0x6c'))[_0xcd58('0x68')](_0xcd58('0x69'),_0xcd58('0x65'))[_0xcd58('0x6d')](_0xcd58('0x6e'))[_0xcd58('0x34')](_0xcd58('0x7a'),_0x5328e4[_0xcd58('0x3f')]['id'][_0xcd58('0x6f')]())[_0xcd58('0x34')](_0xcd58('0x70'),_0x5328e4['body']['state'][_0xcd58('0x6f')]())[_0xcd58('0x34')]('calleridnum\x20IS\x20NOT\x20NULL')[_0xcd58('0x34')](_0xcd58('0x7b'),squel[_0xcd58('0x66')]()[_0xcd58('0x68')](_0xcd58('0x60'))[_0xcd58('0x6d')](_0xcd58('0x5f'))[_0xcd58('0x34')](_0xcd58('0x7a'),_0x5328e4[_0xcd58('0x3f')]['id'][_0xcd58('0x6f')]()))[_0xcd58('0x34')]('calleridnum\x20NOT\x20IN\x20(?)',squel['select']()[_0xcd58('0x68')]('calleridnum')[_0xcd58('0x6d')](_0xcd58('0x6e'))[_0xcd58('0x34')]('CampaignId\x20=\x20?',_0x5328e4[_0xcd58('0x3f')]['id'][_0xcd58('0x6f')]())['where']('state\x20=\x204'))[_0xcd58('0x7c')](_0xcd58('0x62')))['toString']();return db[_0xcd58('0x48')][_0xcd58('0x28')](_0xfa8373);}return[];})[_0xcd58('0x1f')](respondWithResult(_0x5d812c,null))[_0xcd58('0x3d')](handleError(_0x5d812c,null));};exports[_0xcd58('0x7d')]=function(_0xa0115b,_0x3304f5,_0x2445f7){return db['CmHopper']['findOne']({'where':{'VoiceQueueId':_0xa0115b[_0xcd58('0x45')]['VoiceQueueId'],'CampaignId':_0xa0115b[_0xcd58('0x45')][_0xcd58('0x77')],'ContactId':_0xa0115b[_0xcd58('0x45')][_0xcd58('0x62')]}})[_0xcd58('0x1f')](handleEntityNotFound(_0x3304f5,null))[_0xcd58('0x1f')](function(_0x46fb7d){if(_0x46fb7d){return _0x46fb7d;}return null;})['then'](respondWithResult(_0x3304f5,null))[_0xcd58('0x3d')](handleError(_0x3304f5,null));};
\ No newline at end of file