Built motion from commit c738b9ac.|2.6.25
[motion2.git] / server / api / chatMessage / chatMessage.controller.js
index 7e3cbc6..32be132 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4134=['rejectMessage','SELECT','User','email','internal','formData','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','fs-extra','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','register','jayson/promise','client','http','then','info','ChatMessage,\x20%s,\x20%s','debug','ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','request\x20sent','result','catch','status','json','offset','undefined','count','limit','set','Content-Range','reject','save','update','destroy','end','sendStatus','stack','name','send','map','ChatMessage','rawAttributes','fieldName','type','key','model','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','includeAll','include','findAll','params','options','find','create','body','describe','accept','chat','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','agent','get','ChatInteraction','ChatInteractionId','role','interaction','null','AcceptMessage','acceptMessage','SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20','ContactId','sequelize','Sequelize','QueryTypes','contact','fullname','interface','SIP/%s','motionChannel','channel','event','EventManager','acceptmessage','parse','chat-interactions','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage'];(function(_0x3ac16c,_0x54c187){var _0x1204e6=function(_0x25cf2c){while(--_0x25cf2c){_0x3ac16c['push'](_0x3ac16c['shift']());}};_0x1204e6(++_0x54c187);}(_0x4134,0x114));var _0x4413=function(_0x111f0d,_0x37dbc2){_0x111f0d=_0x111f0d-0x0;var _0x108418=_0x4134[_0x111f0d];return _0x108418;};'use strict';var emlformat=require(_0x4413('0x0'));var rimraf=require(_0x4413('0x1'));var zipdir=require(_0x4413('0x2'));var jsonpatch=require(_0x4413('0x3'));var rp=require(_0x4413('0x4'));var moment=require(_0x4413('0x5'));var BPromise=require(_0x4413('0x6'));var Mustache=require(_0x4413('0x7'));var util=require(_0x4413('0x8'));var path=require(_0x4413('0x9'));var sox=require(_0x4413('0xa'));var csv=require('to-csv');var ejs=require(_0x4413('0xb'));var fs=require('fs');var fs_extra=require(_0x4413('0xc'));var _=require('lodash');var squel=require(_0x4413('0xd'));var crypto=require(_0x4413('0xe'));var jsforce=require(_0x4413('0xf'));var deskjs=require(_0x4413('0x10'));var toCsv=require(_0x4413('0x11'));var querystring=require('querystring');var Papa=require(_0x4413('0x12'));var Redis=require('ioredis');var authService=require(_0x4413('0x13'));var qs=require(_0x4413('0x14'));var as=require(_0x4413('0x15'));var hardwareService=require(_0x4413('0x16'));var logger=require(_0x4413('0x17'))(_0x4413('0x18'));var utils=require('../../config/utils');var config=require(_0x4413('0x19'));var licenseUtil=require('../../config/license/util');var db=require(_0x4413('0x1a'))['db'];config[_0x4413('0x1b')]=_[_0x4413('0x1c')](config['redis'],{'host':_0x4413('0x1d'),'port':0x18eb});var socket=require(_0x4413('0x1e'))(new Redis(config[_0x4413('0x1b')]));require(_0x4413('0x1f'))[_0x4413('0x20')](socket);var jayson=require(_0x4413('0x21'));var client=jayson[_0x4413('0x22')]['http']({'port':0x232c});var client9002=jayson['client'][_0x4413('0x23')]({'port':0x232a});function respondWithRpcPromise(_0x7b93c8,_0x48ebe1,_0x41e05f,_0x49366a){return new BPromise(function(_0x290019,_0x18abfe){var _0x1b3489=_0x49366a||client;return _0x1b3489['request'](_0x7b93c8,_0x41e05f)[_0x4413('0x24')](function(_0x149fcb){logger[_0x4413('0x25')](_0x4413('0x26'),_0x48ebe1,'request\x20sent');logger[_0x4413('0x27')](_0x4413('0x28'),_0x48ebe1,'request\x20sent',JSON[_0x4413('0x29')](_0x149fcb));if(_0x149fcb[_0x4413('0x2a')]){if(_0x149fcb['error']['code']===0x1f4){logger[_0x4413('0x2a')](_0x4413('0x26'),_0x48ebe1,_0x149fcb[_0x4413('0x2a')][_0x4413('0x2b')]);return _0x18abfe(_0x149fcb[_0x4413('0x2a')]['message']);}logger[_0x4413('0x2a')](_0x4413('0x26'),_0x48ebe1,_0x149fcb['error'][_0x4413('0x2b')]);return _0x290019(_0x149fcb['error'][_0x4413('0x2b')]);}else{logger['info'](_0x4413('0x26'),_0x48ebe1,_0x4413('0x2c'));_0x290019(_0x149fcb[_0x4413('0x2d')]['message']);}})[_0x4413('0x2e')](function(_0x1af010){logger[_0x4413('0x2a')]('ChatMessage,\x20%s,\x20%s',_0x48ebe1,_0x1af010);_0x18abfe(_0x1af010);});});}function respondWithStatusCode(_0x3782ff,_0x265e1c){_0x265e1c=_0x265e1c||0xcc;return function(_0x26e725){if(_0x26e725){return _0x3782ff['sendStatus'](_0x265e1c);}return _0x3782ff[_0x4413('0x2f')](_0x265e1c)['end']();};}function respondWithResult(_0x1f7d0a,_0x2c3c0b){_0x2c3c0b=_0x2c3c0b||0xc8;return function(_0x57aa55){if(_0x57aa55){return _0x1f7d0a[_0x4413('0x2f')](_0x2c3c0b)[_0x4413('0x30')](_0x57aa55);}};}function respondWithFilteredResult(_0xefe1f2,_0x184fed){return function(_0x30a03c){if(_0x30a03c){var _0x2e69b1=typeof _0x184fed[_0x4413('0x31')]===_0x4413('0x32')&&typeof _0x184fed['limit']===_0x4413('0x32');var _0x3bf4d3=_0x30a03c[_0x4413('0x33')];var _0x283480=_0x2e69b1?0x0:_0x184fed['offset'];var _0x2bf04f=_0x2e69b1?_0x30a03c[_0x4413('0x33')]:_0x184fed[_0x4413('0x31')]+_0x184fed[_0x4413('0x34')];var _0x25bfbf;if(_0x2bf04f>=_0x3bf4d3){_0x2bf04f=_0x3bf4d3;_0x25bfbf=0xc8;}else{_0x25bfbf=0xce;}_0xefe1f2[_0x4413('0x2f')](_0x25bfbf);return _0xefe1f2[_0x4413('0x35')](_0x4413('0x36'),_0x283480+'-'+_0x2bf04f+'/'+_0x3bf4d3)[_0x4413('0x30')](_0x30a03c);}return null;};}function patchUpdates(_0x3f37de){return function(_0x11e72b){try{jsonpatch['apply'](_0x11e72b,_0x3f37de,!![]);}catch(_0xd8516c){return BPromise[_0x4413('0x37')](_0xd8516c);}return _0x11e72b[_0x4413('0x38')]();};}function saveUpdates(_0x2d1c61,_0x5cb3b1){return function(_0x579fcf){if(_0x579fcf){return _0x579fcf[_0x4413('0x39')](_0x2d1c61)[_0x4413('0x24')](function(_0x167106){return _0x167106;});}return null;};}function removeEntity(_0x343dde,_0x1a480e){return function(_0x53237a){if(_0x53237a){return _0x53237a[_0x4413('0x3a')]()[_0x4413('0x24')](function(){_0x343dde[_0x4413('0x2f')](0xcc)[_0x4413('0x3b')]();});}};}function handleEntityNotFound(_0xfd317d,_0x1092d7){return function(_0x351830){if(!_0x351830){_0xfd317d[_0x4413('0x3c')](0x194);}return _0x351830;};}function handleError(_0x4f70f0,_0x36e761){_0x36e761=_0x36e761||0x1f4;return function(_0x481c03){logger['error'](_0x481c03[_0x4413('0x3d')]);if(_0x481c03[_0x4413('0x3e')]){delete _0x481c03['name'];}_0x4f70f0['status'](_0x36e761)[_0x4413('0x3f')](_0x481c03);};}exports['index']=function(_0x25b081,_0x2f0391){var _0x525486={},_0x53a9dc={},_0x3b2a2f={'count':0x0,'rows':[]};var _0x167e17=_[_0x4413('0x40')](db[_0x4413('0x41')][_0x4413('0x42')],function(_0x2c3922){return{'name':_0x2c3922[_0x4413('0x43')],'type':_0x2c3922[_0x4413('0x44')][_0x4413('0x45')]};});_0x53a9dc[_0x4413('0x46')]=_[_0x4413('0x40')](_0x167e17,_0x4413('0x3e'));_0x53a9dc[_0x4413('0x47')]=_[_0x4413('0x48')](_0x25b081[_0x4413('0x47')]);_0x53a9dc[_0x4413('0x49')]=_['intersection'](_0x53a9dc[_0x4413('0x46')],_0x53a9dc['query']);_0x525486[_0x4413('0x4a')]=_[_0x4413('0x4b')](_0x53a9dc['model'],qs[_0x4413('0x4c')](_0x25b081[_0x4413('0x47')][_0x4413('0x4c')]));_0x525486[_0x4413('0x4a')]=_0x525486[_0x4413('0x4a')][_0x4413('0x4d')]?_0x525486[_0x4413('0x4a')]:_0x53a9dc[_0x4413('0x46')];if(!_0x25b081['query'][_0x4413('0x4e')](_0x4413('0x4f'))){_0x525486[_0x4413('0x34')]=qs[_0x4413('0x34')](_0x25b081[_0x4413('0x47')][_0x4413('0x34')]);_0x525486[_0x4413('0x31')]=qs[_0x4413('0x31')](_0x25b081[_0x4413('0x47')]['offset']);}_0x525486[_0x4413('0x50')]=qs[_0x4413('0x51')](_0x25b081['query'][_0x4413('0x51')]);_0x525486[_0x4413('0x52')]=qs[_0x4413('0x49')](_[_0x4413('0x53')](_0x25b081[_0x4413('0x47')],_0x53a9dc[_0x4413('0x49')]),_0x167e17);if(_0x25b081[_0x4413('0x47')][_0x4413('0x54')]){_0x525486[_0x4413('0x52')]=_[_0x4413('0x55')](_0x525486[_0x4413('0x52')],{'$or':_['map'](_0x167e17,function(_0x5aae7a){if(_0x5aae7a[_0x4413('0x44')]!=='VIRTUAL'){var _0x41c8fe={};_0x41c8fe[_0x5aae7a[_0x4413('0x3e')]]={'$like':'%'+_0x25b081[_0x4413('0x47')]['filter']+'%'};return _0x41c8fe;}})});}_0x525486=_['merge']({},_0x525486,_0x25b081['options']);var _0x562c35={'where':_0x525486[_0x4413('0x52')]};return db[_0x4413('0x41')]['count'](_0x562c35)[_0x4413('0x24')](function(_0x56fa74){_0x3b2a2f['count']=_0x56fa74;if(_0x25b081[_0x4413('0x47')][_0x4413('0x56')]){_0x525486[_0x4413('0x57')]=[{'all':!![]}];}return db[_0x4413('0x41')][_0x4413('0x58')](_0x525486);})[_0x4413('0x24')](function(_0x2fd12d){_0x3b2a2f['rows']=_0x2fd12d;return _0x3b2a2f;})[_0x4413('0x24')](respondWithFilteredResult(_0x2f0391,_0x525486))[_0x4413('0x2e')](handleError(_0x2f0391,null));};exports['show']=function(_0x185b46,_0x52d8bc){var _0xd524c1={'raw':!![],'where':{'id':_0x185b46[_0x4413('0x59')]['id']}},_0x25b909={};_0x25b909[_0x4413('0x46')]=_[_0x4413('0x48')](db[_0x4413('0x41')][_0x4413('0x42')]);_0x25b909['query']=_[_0x4413('0x48')](_0x185b46[_0x4413('0x47')]);_0x25b909[_0x4413('0x49')]=_[_0x4413('0x4b')](_0x25b909['model'],_0x25b909[_0x4413('0x47')]);_0xd524c1[_0x4413('0x4a')]=_[_0x4413('0x4b')](_0x25b909['model'],qs[_0x4413('0x4c')](_0x185b46['query'][_0x4413('0x4c')]));_0xd524c1[_0x4413('0x4a')]=_0xd524c1[_0x4413('0x4a')]['length']?_0xd524c1[_0x4413('0x4a')]:_0x25b909[_0x4413('0x46')];if(_0x185b46[_0x4413('0x47')]['includeAll']){_0xd524c1['include']=[{'all':!![]}];}_0xd524c1=_[_0x4413('0x55')]({},_0xd524c1,_0x185b46[_0x4413('0x5a')]);return db[_0x4413('0x41')][_0x4413('0x5b')](_0xd524c1)[_0x4413('0x24')](handleEntityNotFound(_0x52d8bc,null))[_0x4413('0x24')](respondWithResult(_0x52d8bc,null))[_0x4413('0x2e')](handleError(_0x52d8bc,null));};exports[_0x4413('0x5c')]=function(_0x42fd67,_0x322b5a){return db[_0x4413('0x41')]['create'](_0x42fd67['body'],{})[_0x4413('0x24')](respondWithResult(_0x322b5a,0xc9))[_0x4413('0x2e')](handleError(_0x322b5a,null));};exports[_0x4413('0x39')]=function(_0xe9f437,_0x2d1c09){if(_0xe9f437[_0x4413('0x5d')]['id']){delete _0xe9f437[_0x4413('0x5d')]['id'];}return db[_0x4413('0x41')][_0x4413('0x5b')]({'where':{'id':_0xe9f437[_0x4413('0x59')]['id']}})[_0x4413('0x24')](handleEntityNotFound(_0x2d1c09,null))[_0x4413('0x24')](saveUpdates(_0xe9f437[_0x4413('0x5d')],null))[_0x4413('0x24')](respondWithResult(_0x2d1c09,null))[_0x4413('0x2e')](handleError(_0x2d1c09,null));};exports[_0x4413('0x3a')]=function(_0x3c65eb,_0x6aaefd){return db[_0x4413('0x41')][_0x4413('0x5b')]({'where':{'id':_0x3c65eb[_0x4413('0x59')]['id']}})[_0x4413('0x24')](handleEntityNotFound(_0x6aaefd,null))['then'](removeEntity(_0x6aaefd,null))[_0x4413('0x2e')](handleError(_0x6aaefd,null));};exports['describe']=function(_0x1cab2f,_0x57a86a){return db['ChatMessage'][_0x4413('0x5e')]()['then'](respondWithResult(_0x57a86a,null))[_0x4413('0x2e')](handleError(_0x57a86a,null));};var interaction_log=require(_0x4413('0x17'))('chat-interactions');exports[_0x4413('0x5f')]=function(_0x277070,_0x2578a7,_0x5a4bff){var _0x10bffa={'agent':{},'channel':_0x4413('0x60')};if(_0x277070['body']['id']){delete _0x277070[_0x4413('0x5d')]['id'];}_0x277070[_0x4413('0x5d')]['read']=!![];_0x277070[_0x4413('0x5d')][_0x4413('0x61')]=moment()[_0x4413('0x62')](_0x4413('0x63'));_0x277070[_0x4413('0x5d')][_0x4413('0x64')]=_0x277070[_0x4413('0x5d')][_0x4413('0x64')]||_0x277070[_0x4413('0x65')]['id'];_0x10bffa[_0x4413('0x66')]['id']=_0x277070[_0x4413('0x5d')][_0x4413('0x64')];return db[_0x4413('0x41')]['find']({'where':{'id':_0x277070[_0x4413('0x59')]['id'],'UserId':null}})[_0x4413('0x24')](handleEntityNotFound(_0x2578a7,null))[_0x4413('0x24')](saveUpdates(_0x277070[_0x4413('0x5d')],null))[_0x4413('0x24')](function(_0x49bf2c){if(_0x49bf2c){_0x10bffa['message']=_0x49bf2c[_0x4413('0x67')]({'plain':!![]});return db[_0x4413('0x68')][_0x4413('0x5b')]({'where':{'id':_0x49bf2c[_0x4413('0x69')]}});}return null;})[_0x4413('0x24')](handleEntityNotFound(_0x2578a7,null))[_0x4413('0x24')](function(_0x5c9a22){if(_0x5c9a22){return _0x5c9a22['update']({'UserId':_0x277070[_0x4413('0x5d')]['UserId'],'read1stAt':_['isNil'](_0x5c9a22['read1stAt'])?moment()[_0x4413('0x62')](_0x4413('0x63')):undefined});}return null;})['then'](function(_0x2b1883){if(_0x2b1883){_0x10bffa['interaction']=_0x2b1883[_0x4413('0x67')]({'plain':!![]});interaction_log[_0x4413('0x25')]('[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x277070[_0x4413('0x65')]['id'],_0x277070[_0x4413('0x65')][_0x4413('0x3e')],_0x277070[_0x4413('0x65')][_0x4413('0x6a')],_0x10bffa[_0x4413('0x6b')]['id'],_0x277070[_0x4413('0x5d')]?JSON[_0x4413('0x29')](_0x277070[_0x4413('0x5d')]):_0x4413('0x6c'));return respondWithRpcPromise(_0x4413('0x6d'),_0x4413('0x6e'),_0x10bffa);}return null;})[_0x4413('0x24')](function(_0xc95074){var _0x2e9541=_0x4413('0x6f')+_0xc95074[_0x4413('0x2b')][_0x4413('0x70')];return db[_0x4413('0x71')]['query'](_0x2e9541,{'type':db[_0x4413('0x72')][_0x4413('0x73')]['SELECT'],'raw':!![]})[_0x4413('0x24')](function(_0x4baf00){return _0x4baf00;});})[_0x4413('0x24')](function(_0x43114b){if(_0x43114b){_0x10bffa[_0x4413('0x2b')][_0x4413('0x74')]=_0x43114b[0x0];if(!_0x277070[_0x4413('0x5d')][_0x4413('0x64')])return;return db['User'][_0x4413('0x5b')]({'where':{'id':_0x277070['body'][_0x4413('0x64')],'role':_0x4413('0x66')},'attributes':['id','name',_0x4413('0x75'),'email','internal'],'raw':!![]});}return null;})[_0x4413('0x24')](function(_0x2736dc){if(!_0x2736dc)return null;_0x10bffa[_0x4413('0x2b')][_0x4413('0x66')]=_0x2736dc;return _0x10bffa;})[_0x4413('0x24')](function(_0x35165a){if(_0x35165a){if(_0x277070['body']['manual']){_0x10bffa['message'][_0x4413('0x76')]=util[_0x4413('0x62')](_0x4413('0x77'),_0x277070[_0x4413('0x65')][_0x4413('0x3e')]);_0x10bffa['message']['channel']=_0x10bffa['channel'];_0x10bffa[_0x4413('0x2b')][_0x4413('0x78')]=_0x10bffa[_0x4413('0x79')];_0x10bffa[_0x4413('0x2b')][_0x4413('0x7a')]=_0x4413('0x5f');return respondWithRpcPromise(_0x4413('0x7b'),_0x4413('0x7b'),{'event':_0x4413('0x7c'),'message':_[_0x4413('0x55')](_0x10bffa[_0x4413('0x2b')],JSON[_0x4413('0x7d')](_0x10bffa[_0x4413('0x6b')]['formData']))},client9002)[_0x4413('0x24')](function(){return _0x10bffa;});}return _0x10bffa;}return null;})['then'](respondWithResult(_0x2578a7,null))[_0x4413('0x2e')](handleError(_0x2578a7,null));};var interaction_log=require('../../config/logger')(_0x4413('0x7e'));exports[_0x4413('0x37')]=function(_0x24ee95,_0x25411e,_0x1ec83c){var _0x184f71={'agent':{},'channel':_0x4413('0x60')};if(_0x24ee95[_0x4413('0x5d')]['id']){delete _0x24ee95[_0x4413('0x5d')]['id'];}_0x24ee95[_0x4413('0x5d')][_0x4413('0x64')]=_0x24ee95[_0x4413('0x5d')][_0x4413('0x64')]||_0x24ee95[_0x4413('0x65')]['id'];_0x184f71[_0x4413('0x66')]['id']=_0x24ee95['body'][_0x4413('0x64')];return db[_0x4413('0x41')][_0x4413('0x5b')]({'where':{'id':_0x24ee95['params']['id'],'UserId':null}})['then'](handleEntityNotFound(_0x25411e,null))['then'](function(_0x58d9a3){if(_0x58d9a3){_0x184f71['message']=_0x58d9a3[_0x4413('0x67')]({'plain':!![]});return db[_0x4413('0x68')][_0x4413('0x5b')]({'where':{'id':_0x58d9a3[_0x4413('0x69')]}});}return null;})[_0x4413('0x24')](handleEntityNotFound(_0x25411e,null))[_0x4413('0x24')](function(_0x3b21e1){if(_0x3b21e1){_0x184f71[_0x4413('0x6b')]=_0x3b21e1[_0x4413('0x67')]({'plain':!![]});interaction_log['info'](_0x4413('0x7f'),_0x24ee95[_0x4413('0x65')]['id'],_0x24ee95[_0x4413('0x65')][_0x4413('0x3e')],_0x24ee95['user'][_0x4413('0x6a')],_0x184f71[_0x4413('0x6b')]['id'],_0x24ee95[_0x4413('0x5d')]?JSON['stringify'](_0x24ee95[_0x4413('0x5d')]):'null');return respondWithRpcPromise(_0x4413('0x80'),_0x4413('0x81'),_0x184f71);}return null;})['then'](function(_0x1164e1){var _0x11b455=_0x4413('0x6f')+_0x1164e1[_0x4413('0x2b')][_0x4413('0x70')];return db[_0x4413('0x71')][_0x4413('0x47')](_0x11b455,{'type':db[_0x4413('0x72')][_0x4413('0x73')][_0x4413('0x82')],'raw':!![]})[_0x4413('0x24')](function(_0x445df9){return _0x445df9;});})[_0x4413('0x24')](function(_0x136063){if(_0x136063){_0x184f71[_0x4413('0x2b')][_0x4413('0x74')]=_0x136063[0x0];if(!_0x24ee95[_0x4413('0x5d')][_0x4413('0x64')])return;return db[_0x4413('0x83')][_0x4413('0x5b')]({'where':{'id':_0x24ee95['body'][_0x4413('0x64')],'role':'agent'},'attributes':['id','name',_0x4413('0x75'),_0x4413('0x84'),_0x4413('0x85')],'raw':!![]});}return null;})[_0x4413('0x24')](function(_0x127830){if(!_0x127830)return null;_0x184f71[_0x4413('0x2b')][_0x4413('0x66')]=_0x127830;return _0x184f71;})[_0x4413('0x24')](function(_0x3363bd){if(_0x3363bd){_0x3363bd['message'][_0x4413('0x76')]=util[_0x4413('0x62')](_0x4413('0x77'),_0x24ee95[_0x4413('0x65')][_0x4413('0x3e')]);_0x3363bd[_0x4413('0x2b')][_0x4413('0x79')]=_0x184f71['channel'];_0x3363bd[_0x4413('0x2b')]['motionChannel']=_0x184f71[_0x4413('0x79')];_0x3363bd['message'][_0x4413('0x7a')]=_0x4413('0x37');respondWithRpcPromise('EventManager',_0x4413('0x7b'),{'event':'rejectmessage','message':_[_0x4413('0x55')](_0x184f71[_0x4413('0x2b')],JSON[_0x4413('0x7d')](_0x184f71[_0x4413('0x6b')][_0x4413('0x86')]))},client9002);return _0x184f71;}return null;})[_0x4413('0x24')](respondWithResult(_0x25411e,null))[_0x4413('0x2e')](handleError(_0x25411e,null));};
\ No newline at end of file
+var _0x219e=['../../config/utils','../../mysqldb','redis','defaults','socket.io-emitter','register','jayson/promise','client','http','request','info','request\x20sent','debug','ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','ChatMessage,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','undefined','limit','count','offset','set','Content-Range','apply','reject','save','update','then','stack','name','index','map','ChatMessage','rawAttributes','fieldName','type','key','model','query','keys','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','filter','merge','options','includeAll','include','findAll','show','find','create','body','params','describe','../../config/logger','accept','chat','readAt','format','UserId','user','agent','get','ChatInteraction','ChatInteractionId','isNil','read1stAt','YYYY-MM-DD\x20HH:mm:ss','interaction','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','null','AcceptMessage','acceptMessage','QueryTypes','contact','User','fullname','email','internal','interface','SIP/%s','channel','motionChannel','event','EventManager','acceptmessage','parse','chat-interactions','RejectMessage','sequelize','Sequelize','SELECT','formData','eml-format','rimraf','zip-dir','request-promise','mustache','util','path','sox','ejs','fs-extra','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','api'];(function(_0xcd3e25,_0x3778c5){var _0x7164ce=function(_0x360b82){while(--_0x360b82){_0xcd3e25['push'](_0xcd3e25['shift']());}};_0x7164ce(++_0x3778c5);}(_0x219e,0x172));var _0xe219=function(_0x5f0089,_0x227e2c){_0x5f0089=_0x5f0089-0x0;var _0x193892=_0x219e[_0x5f0089];return _0x193892;};'use strict';var emlformat=require(_0xe219('0x0'));var rimraf=require(_0xe219('0x1'));var zipdir=require(_0xe219('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe219('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xe219('0x4'));var util=require(_0xe219('0x5'));var path=require(_0xe219('0x6'));var sox=require(_0xe219('0x7'));var csv=require('to-csv');var ejs=require(_0xe219('0x8'));var fs=require('fs');var fs_extra=require(_0xe219('0x9'));var _=require(_0xe219('0xa'));var squel=require(_0xe219('0xb'));var crypto=require('crypto');var jsforce=require(_0xe219('0xc'));var deskjs=require(_0xe219('0xd'));var toCsv=require(_0xe219('0xe'));var querystring=require(_0xe219('0xf'));var Papa=require(_0xe219('0x10'));var Redis=require(_0xe219('0x11'));var authService=require(_0xe219('0x12'));var qs=require('../../components/parsers/qs');var as=require('../../components/parsers/advancedSearch');var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xe219('0x13'));var utils=require(_0xe219('0x14'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0xe219('0x15'))['db'];config[_0xe219('0x16')]=_[_0xe219('0x17')](config[_0xe219('0x16')],{'host':'localhost','port':0x18eb});var socket=require(_0xe219('0x18'))(new Redis(config['redis']));require('./chatMessage.socket')[_0xe219('0x19')](socket);var jayson=require(_0xe219('0x1a'));var client=jayson[_0xe219('0x1b')]['http']({'port':0x232c});var client9002=jayson[_0xe219('0x1b')][_0xe219('0x1c')]({'port':0x232a});function respondWithRpcPromise(_0x1cc791,_0x37fcc6,_0x121059,_0x1c6aea){return new BPromise(function(_0x28f9e4,_0x6ea9be){var _0x3c78ad=_0x1c6aea||client;return _0x3c78ad[_0xe219('0x1d')](_0x1cc791,_0x121059)['then'](function(_0x5adbe9){logger[_0xe219('0x1e')]('ChatMessage,\x20%s,\x20%s',_0x37fcc6,_0xe219('0x1f'));logger[_0xe219('0x20')](_0xe219('0x21'),_0x37fcc6,'request\x20sent',JSON[_0xe219('0x22')](_0x5adbe9));if(_0x5adbe9['error']){if(_0x5adbe9[_0xe219('0x23')][_0xe219('0x24')]===0x1f4){logger['error'](_0xe219('0x25'),_0x37fcc6,_0x5adbe9[_0xe219('0x23')][_0xe219('0x26')]);return _0x6ea9be(_0x5adbe9['error'][_0xe219('0x26')]);}logger[_0xe219('0x23')](_0xe219('0x25'),_0x37fcc6,_0x5adbe9['error'][_0xe219('0x26')]);return _0x28f9e4(_0x5adbe9['error'][_0xe219('0x26')]);}else{logger[_0xe219('0x1e')](_0xe219('0x25'),_0x37fcc6,_0xe219('0x1f'));_0x28f9e4(_0x5adbe9[_0xe219('0x27')][_0xe219('0x26')]);}})[_0xe219('0x28')](function(_0x1dab92){logger['error'](_0xe219('0x25'),_0x37fcc6,_0x1dab92);_0x6ea9be(_0x1dab92);});});}function respondWithStatusCode(_0x1483b6,_0x2adb15){_0x2adb15=_0x2adb15||0xcc;return function(_0x73611e){if(_0x73611e){return _0x1483b6[_0xe219('0x29')](_0x2adb15);}return _0x1483b6[_0xe219('0x2a')](_0x2adb15)[_0xe219('0x2b')]();};}function respondWithResult(_0x319763,_0x43d2b0){_0x43d2b0=_0x43d2b0||0xc8;return function(_0x145082){if(_0x145082){return _0x319763[_0xe219('0x2a')](_0x43d2b0)[_0xe219('0x2c')](_0x145082);}};}function respondWithFilteredResult(_0x1aee9e,_0x2b042a){return function(_0x8ea90){if(_0x8ea90){var _0x4ce0bc=typeof _0x2b042a['offset']===_0xe219('0x2d')&&typeof _0x2b042a[_0xe219('0x2e')]===_0xe219('0x2d');var _0x1367b3=_0x8ea90[_0xe219('0x2f')];var _0x173e3b=_0x4ce0bc?0x0:_0x2b042a[_0xe219('0x30')];var _0x58d368=_0x4ce0bc?_0x8ea90[_0xe219('0x2f')]:_0x2b042a[_0xe219('0x30')]+_0x2b042a[_0xe219('0x2e')];var _0x4cc639;if(_0x58d368>=_0x1367b3){_0x58d368=_0x1367b3;_0x4cc639=0xc8;}else{_0x4cc639=0xce;}_0x1aee9e[_0xe219('0x2a')](_0x4cc639);return _0x1aee9e[_0xe219('0x31')](_0xe219('0x32'),_0x173e3b+'-'+_0x58d368+'/'+_0x1367b3)[_0xe219('0x2c')](_0x8ea90);}return null;};}function patchUpdates(_0x2f5b25){return function(_0x38e4fe){try{jsonpatch[_0xe219('0x33')](_0x38e4fe,_0x2f5b25,!![]);}catch(_0xab7136){return BPromise[_0xe219('0x34')](_0xab7136);}return _0x38e4fe[_0xe219('0x35')]();};}function saveUpdates(_0x29bc4b,_0x3a43de){return function(_0xd7cc54){if(_0xd7cc54){return _0xd7cc54[_0xe219('0x36')](_0x29bc4b)['then'](function(_0x3e9115){return _0x3e9115;});}return null;};}function removeEntity(_0x4120ff,_0x57b40a){return function(_0x2294a4){if(_0x2294a4){return _0x2294a4['destroy']()[_0xe219('0x37')](function(){_0x4120ff[_0xe219('0x2a')](0xcc)[_0xe219('0x2b')]();});}};}function handleEntityNotFound(_0x4462d3,_0x1d7845){return function(_0x58a4cf){if(!_0x58a4cf){_0x4462d3[_0xe219('0x29')](0x194);}return _0x58a4cf;};}function handleError(_0x4225a7,_0xe66907){_0xe66907=_0xe66907||0x1f4;return function(_0x368798){logger[_0xe219('0x23')](_0x368798[_0xe219('0x38')]);if(_0x368798[_0xe219('0x39')]){delete _0x368798['name'];}_0x4225a7[_0xe219('0x2a')](_0xe66907)['send'](_0x368798);};}exports[_0xe219('0x3a')]=function(_0x3ea303,_0x1f5ef4){var _0x409003={},_0x46d55f={},_0x35c4a8={'count':0x0,'rows':[]};var _0x5ef2ea=_[_0xe219('0x3b')](db[_0xe219('0x3c')][_0xe219('0x3d')],function(_0x2eedaf){return{'name':_0x2eedaf[_0xe219('0x3e')],'type':_0x2eedaf[_0xe219('0x3f')][_0xe219('0x40')]};});_0x46d55f[_0xe219('0x41')]=_[_0xe219('0x3b')](_0x5ef2ea,_0xe219('0x39'));_0x46d55f[_0xe219('0x42')]=_[_0xe219('0x43')](_0x3ea303[_0xe219('0x42')]);_0x46d55f[_0xe219('0x44')]=_[_0xe219('0x45')](_0x46d55f[_0xe219('0x41')],_0x46d55f[_0xe219('0x42')]);_0x409003[_0xe219('0x46')]=_[_0xe219('0x45')](_0x46d55f[_0xe219('0x41')],qs[_0xe219('0x47')](_0x3ea303[_0xe219('0x42')][_0xe219('0x47')]));_0x409003[_0xe219('0x46')]=_0x409003['attributes'][_0xe219('0x48')]?_0x409003[_0xe219('0x46')]:_0x46d55f['model'];if(!_0x3ea303[_0xe219('0x42')]['hasOwnProperty'](_0xe219('0x49'))){_0x409003['limit']=qs[_0xe219('0x2e')](_0x3ea303[_0xe219('0x42')][_0xe219('0x2e')]);_0x409003[_0xe219('0x30')]=qs[_0xe219('0x30')](_0x3ea303[_0xe219('0x42')]['offset']);}_0x409003[_0xe219('0x4a')]=qs['sort'](_0x3ea303['query'][_0xe219('0x4b')]);_0x409003[_0xe219('0x4c')]=qs[_0xe219('0x44')](_[_0xe219('0x4d')](_0x3ea303[_0xe219('0x42')],_0x46d55f[_0xe219('0x44')]),_0x5ef2ea);if(_0x3ea303['query'][_0xe219('0x4e')]){_0x409003[_0xe219('0x4c')]=_[_0xe219('0x4f')](_0x409003[_0xe219('0x4c')],{'$or':_[_0xe219('0x3b')](_0x5ef2ea,function(_0x5767c5){if(_0x5767c5[_0xe219('0x3f')]!=='VIRTUAL'){var _0x44547a={};_0x44547a[_0x5767c5[_0xe219('0x39')]]={'$like':'%'+_0x3ea303[_0xe219('0x42')][_0xe219('0x4e')]+'%'};return _0x44547a;}})});}_0x409003=_[_0xe219('0x4f')]({},_0x409003,_0x3ea303[_0xe219('0x50')]);var _0x2be226={'where':_0x409003[_0xe219('0x4c')]};return db[_0xe219('0x3c')][_0xe219('0x2f')](_0x2be226)[_0xe219('0x37')](function(_0x2675b2){_0x35c4a8[_0xe219('0x2f')]=_0x2675b2;if(_0x3ea303[_0xe219('0x42')][_0xe219('0x51')]){_0x409003[_0xe219('0x52')]=[{'all':!![]}];}return db['ChatMessage'][_0xe219('0x53')](_0x409003);})['then'](function(_0x96ae8a){_0x35c4a8['rows']=_0x96ae8a;return _0x35c4a8;})['then'](respondWithFilteredResult(_0x1f5ef4,_0x409003))[_0xe219('0x28')](handleError(_0x1f5ef4,null));};exports[_0xe219('0x54')]=function(_0x241532,_0x5e6053){var _0x35f9e5={'raw':!![],'where':{'id':_0x241532['params']['id']}},_0x56c9b9={};_0x56c9b9[_0xe219('0x41')]=_[_0xe219('0x43')](db['ChatMessage'][_0xe219('0x3d')]);_0x56c9b9[_0xe219('0x42')]=_[_0xe219('0x43')](_0x241532[_0xe219('0x42')]);_0x56c9b9[_0xe219('0x44')]=_[_0xe219('0x45')](_0x56c9b9[_0xe219('0x41')],_0x56c9b9[_0xe219('0x42')]);_0x35f9e5['attributes']=_['intersection'](_0x56c9b9[_0xe219('0x41')],qs[_0xe219('0x47')](_0x241532[_0xe219('0x42')][_0xe219('0x47')]));_0x35f9e5[_0xe219('0x46')]=_0x35f9e5[_0xe219('0x46')][_0xe219('0x48')]?_0x35f9e5[_0xe219('0x46')]:_0x56c9b9[_0xe219('0x41')];if(_0x241532[_0xe219('0x42')][_0xe219('0x51')]){_0x35f9e5[_0xe219('0x52')]=[{'all':!![]}];}_0x35f9e5=_[_0xe219('0x4f')]({},_0x35f9e5,_0x241532['options']);return db[_0xe219('0x3c')][_0xe219('0x55')](_0x35f9e5)[_0xe219('0x37')](handleEntityNotFound(_0x5e6053,null))['then'](respondWithResult(_0x5e6053,null))[_0xe219('0x28')](handleError(_0x5e6053,null));};exports[_0xe219('0x56')]=function(_0x2108b5,_0x595b49){return db['ChatMessage'][_0xe219('0x56')](_0x2108b5['body'],{})[_0xe219('0x37')](respondWithResult(_0x595b49,0xc9))[_0xe219('0x28')](handleError(_0x595b49,null));};exports['update']=function(_0x14fd8b,_0x19a671){if(_0x14fd8b[_0xe219('0x57')]['id']){delete _0x14fd8b[_0xe219('0x57')]['id'];}return db['ChatMessage'][_0xe219('0x55')]({'where':{'id':_0x14fd8b['params']['id']}})[_0xe219('0x37')](handleEntityNotFound(_0x19a671,null))[_0xe219('0x37')](saveUpdates(_0x14fd8b['body'],null))[_0xe219('0x37')](respondWithResult(_0x19a671,null))[_0xe219('0x28')](handleError(_0x19a671,null));};exports['destroy']=function(_0x4ba463,_0x4f8949){return db[_0xe219('0x3c')][_0xe219('0x55')]({'where':{'id':_0x4ba463[_0xe219('0x58')]['id']}})[_0xe219('0x37')](handleEntityNotFound(_0x4f8949,null))['then'](removeEntity(_0x4f8949,null))['catch'](handleError(_0x4f8949,null));};exports[_0xe219('0x59')]=function(_0x374db7,_0x51ba18){return db[_0xe219('0x3c')]['describe']()[_0xe219('0x37')](respondWithResult(_0x51ba18,null))[_0xe219('0x28')](handleError(_0x51ba18,null));};var interaction_log=require(_0xe219('0x5a'))('chat-interactions');exports[_0xe219('0x5b')]=function(_0x1be055,_0x54ee10,_0xf8511e){var _0x6007ae={'agent':{},'channel':_0xe219('0x5c')};if(_0x1be055[_0xe219('0x57')]['id']){delete _0x1be055['body']['id'];}_0x1be055['body']['read']=!![];_0x1be055[_0xe219('0x57')][_0xe219('0x5d')]=moment()[_0xe219('0x5e')]('YYYY-MM-DD\x20HH:mm:ss');_0x1be055[_0xe219('0x57')][_0xe219('0x5f')]=_0x1be055[_0xe219('0x57')][_0xe219('0x5f')]||_0x1be055[_0xe219('0x60')]['id'];_0x6007ae[_0xe219('0x61')]['id']=_0x1be055[_0xe219('0x57')][_0xe219('0x5f')];return db['ChatMessage']['find']({'where':{'id':_0x1be055[_0xe219('0x58')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x54ee10,null))[_0xe219('0x37')](saveUpdates(_0x1be055[_0xe219('0x57')],null))['then'](function(_0x248d58){if(_0x248d58){_0x6007ae[_0xe219('0x26')]=_0x248d58[_0xe219('0x62')]({'plain':!![]});return db[_0xe219('0x63')][_0xe219('0x55')]({'where':{'id':_0x248d58[_0xe219('0x64')]}});}return null;})[_0xe219('0x37')](handleEntityNotFound(_0x54ee10,null))[_0xe219('0x37')](function(_0x23725e){if(_0x23725e){return _0x23725e['update']({'UserId':_0x1be055[_0xe219('0x57')][_0xe219('0x5f')],'read1stAt':_[_0xe219('0x65')](_0x23725e[_0xe219('0x66')])?moment()[_0xe219('0x5e')](_0xe219('0x67')):undefined});}return null;})['then'](function(_0x439b6a){if(_0x439b6a){_0x6007ae[_0xe219('0x68')]=_0x439b6a['get']({'plain':!![]});interaction_log[_0xe219('0x1e')](_0xe219('0x69'),_0x1be055['user']['id'],_0x1be055['user'][_0xe219('0x39')],_0x1be055[_0xe219('0x60')][_0xe219('0x6a')],_0x6007ae[_0xe219('0x68')]['id'],_0x1be055['body']?JSON[_0xe219('0x22')](_0x1be055[_0xe219('0x57')]):_0xe219('0x6b'));return respondWithRpcPromise(_0xe219('0x6c'),_0xe219('0x6d'),_0x6007ae);}return null;})[_0xe219('0x37')](function(_0x1d882b){var _0xb615ea='SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20'+_0x1d882b[_0xe219('0x26')]['ContactId'];return db['sequelize'][_0xe219('0x42')](_0xb615ea,{'type':db['Sequelize'][_0xe219('0x6e')]['SELECT'],'raw':!![]})[_0xe219('0x37')](function(_0x24703f){return _0x24703f;});})['then'](function(_0x197878){if(_0x197878){_0x6007ae[_0xe219('0x26')][_0xe219('0x6f')]=_0x197878[0x0];if(!_0x1be055[_0xe219('0x57')][_0xe219('0x5f')])return;return db[_0xe219('0x70')][_0xe219('0x55')]({'where':{'id':_0x1be055[_0xe219('0x57')][_0xe219('0x5f')],'role':_0xe219('0x61')},'attributes':['id',_0xe219('0x39'),_0xe219('0x71'),_0xe219('0x72'),_0xe219('0x73')],'raw':!![]});}return null;})['then'](function(_0x27840a){if(!_0x27840a)return null;_0x6007ae[_0xe219('0x26')][_0xe219('0x61')]=_0x27840a;return _0x6007ae;})[_0xe219('0x37')](function(_0x20bee7){if(_0x20bee7){if(_0x1be055[_0xe219('0x57')]['manual']){_0x6007ae['message'][_0xe219('0x74')]=util[_0xe219('0x5e')](_0xe219('0x75'),_0x1be055[_0xe219('0x60')]['name']);_0x6007ae[_0xe219('0x26')][_0xe219('0x76')]=_0x6007ae['channel'];_0x6007ae['message'][_0xe219('0x77')]=_0x6007ae['channel'];_0x6007ae[_0xe219('0x26')][_0xe219('0x78')]='accept';return respondWithRpcPromise(_0xe219('0x79'),_0xe219('0x79'),{'event':_0xe219('0x7a'),'message':_[_0xe219('0x4f')](_0x6007ae['message'],JSON[_0xe219('0x7b')](_0x6007ae[_0xe219('0x68')]['formData']))},client9002)['then'](function(){return _0x6007ae;});}return _0x6007ae;}return null;})[_0xe219('0x37')](respondWithResult(_0x54ee10,null))['catch'](handleError(_0x54ee10,null));};var interaction_log=require(_0xe219('0x5a'))(_0xe219('0x7c'));exports[_0xe219('0x34')]=function(_0x5bdb8e,_0x3c9e92,_0x519d69){var _0x13a16c={'agent':{},'channel':_0xe219('0x5c')};if(_0x5bdb8e[_0xe219('0x57')]['id']){delete _0x5bdb8e[_0xe219('0x57')]['id'];}_0x5bdb8e['body'][_0xe219('0x5f')]=_0x5bdb8e['body'][_0xe219('0x5f')]||_0x5bdb8e['user']['id'];_0x13a16c[_0xe219('0x61')]['id']=_0x5bdb8e[_0xe219('0x57')]['UserId'];return db['ChatMessage']['find']({'where':{'id':_0x5bdb8e[_0xe219('0x58')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x3c9e92,null))[_0xe219('0x37')](function(_0x329050){if(_0x329050){_0x13a16c[_0xe219('0x26')]=_0x329050[_0xe219('0x62')]({'plain':!![]});return db[_0xe219('0x63')]['find']({'where':{'id':_0x329050['ChatInteractionId']}});}return null;})[_0xe219('0x37')](handleEntityNotFound(_0x3c9e92,null))[_0xe219('0x37')](function(_0x43a2e1){if(_0x43a2e1){_0x13a16c[_0xe219('0x68')]=_0x43a2e1[_0xe219('0x62')]({'plain':!![]});interaction_log[_0xe219('0x1e')]('[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x5bdb8e[_0xe219('0x60')]['id'],_0x5bdb8e[_0xe219('0x60')][_0xe219('0x39')],_0x5bdb8e[_0xe219('0x60')][_0xe219('0x6a')],_0x13a16c[_0xe219('0x68')]['id'],_0x5bdb8e[_0xe219('0x57')]?JSON[_0xe219('0x22')](_0x5bdb8e[_0xe219('0x57')]):_0xe219('0x6b'));return respondWithRpcPromise(_0xe219('0x7d'),'rejectMessage',_0x13a16c);}return null;})['then'](function(_0x49d161){var _0x4075ac='SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20'+_0x49d161[_0xe219('0x26')]['ContactId'];return db[_0xe219('0x7e')][_0xe219('0x42')](_0x4075ac,{'type':db[_0xe219('0x7f')][_0xe219('0x6e')][_0xe219('0x80')],'raw':!![]})['then'](function(_0x7e46cb){return _0x7e46cb;});})[_0xe219('0x37')](function(_0x47a05e){if(_0x47a05e){_0x13a16c[_0xe219('0x26')][_0xe219('0x6f')]=_0x47a05e[0x0];if(!_0x5bdb8e[_0xe219('0x57')][_0xe219('0x5f')])return;return db[_0xe219('0x70')][_0xe219('0x55')]({'where':{'id':_0x5bdb8e[_0xe219('0x57')][_0xe219('0x5f')],'role':'agent'},'attributes':['id',_0xe219('0x39'),_0xe219('0x71'),_0xe219('0x72'),_0xe219('0x73')],'raw':!![]});}return null;})[_0xe219('0x37')](function(_0x25a36c){if(!_0x25a36c)return null;_0x13a16c[_0xe219('0x26')][_0xe219('0x61')]=_0x25a36c;return _0x13a16c;})[_0xe219('0x37')](function(_0xbd40a9){if(_0xbd40a9){_0xbd40a9['message']['interface']=util[_0xe219('0x5e')]('SIP/%s',_0x5bdb8e[_0xe219('0x60')][_0xe219('0x39')]);_0xbd40a9['message'][_0xe219('0x76')]=_0x13a16c[_0xe219('0x76')];_0xbd40a9['message'][_0xe219('0x77')]=_0x13a16c[_0xe219('0x76')];_0xbd40a9[_0xe219('0x26')][_0xe219('0x78')]=_0xe219('0x34');respondWithRpcPromise(_0xe219('0x79'),'EventManager',{'event':'rejectmessage','message':_[_0xe219('0x4f')](_0x13a16c[_0xe219('0x26')],JSON[_0xe219('0x7b')](_0x13a16c[_0xe219('0x68')][_0xe219('0x81')]))},client9002);return _0x13a16c;}return null;})[_0xe219('0x37')](respondWithResult(_0x3c9e92,null))[_0xe219('0x28')](handleError(_0x3c9e92,null));};
\ No newline at end of file